面试

1. 异步通信和同步通信的区别?

同步通信与异步通信区别:

   1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
    2.
同步通信效率高;异步通信效率较低。
    3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
    4.同步通信可用于点对多点;异步通信只适用于点对点。


2. TCP协议的作用?三次握手是通过什么方法来保证通信双方确认的正确?

  TCP提供的可靠数据传输服务,是依靠接收端TCP软件按序号对收到的数据分组进行逐一确认实现的。这个过程在TCP收发端开始通信时,被称为三次握手初始化。

三次握手过程:

第一次握手:建立连接时,客户端发送syn(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 

       
第二次握手:服务器收到syn包,必须确认客户的SYNack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 

       
第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。


3. 操作系统执行可执行程序时,内存分配是怎样的?

一个由c/C++编译的程序占用的内存分为以下几个部分
1
、栈区(stack— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2
、堆区(heap— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3
、全局区(静态区)(static全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4
、文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放
5
、程序代码区(text)—存放函数体的二进制代码。


4. 引用和多态的区别?

答:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

多态是允许你将父对象设置成和它一个或更多的子对象相等的技术,赋值之后, 父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单地说就是一句话,允许将子类类型的指针赋值给父类型的指针。多态在C++中是通过虚函数实现的。


5. 堆和栈的区别?

答:stack的空间由操作系统自动分配/释放,heap上的空间需要手动分配/释放

栈的空间有限,堆是很大的自由存储区。

程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用参数的传递也在栈上进行。


6. 进程之间通信的方式有哪些?

答:信号、信号量、消息队列、共享内存。


7. 面向对象的三个特征,分别有什么作用?

答:封装:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

        继承:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展

  多态:多态性( polymorphisn )是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有二种方式,覆盖,重载。
8. 虚函数的实现机制

答:
9. 如何判断一棵树是平衡二叉树

答:如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

 


10.sizeof在计算变量所占空间大小时采取的机制

答:
11.结构体struct和联合体union的区别

答:  共用体

构造数据类型,也叫联合体
用途:使几个不同类型的变量共占一段内存(相互覆盖)

结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自定义数据类型

Structure 与 Union主要有以下区别:

1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。

2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。


12.目前效率最好的内部排序是什么

答:归并排序:最差、平均、最好都是O(nlog2n)

各种排序方法对比:

 
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值