一些问题

linux内存怎么布局的:

每个进程都有自己独立的4G内存空间:1G共享的内核空间,3G独立的用户空间
进程对应的内存空间中所包含的5种不同的数据区
.reserve(预留)段 一共占用128M,属于预留空间,进程是禁止访问的
代码段(.text):这里存放的是CPU要执行的指令。代码段是可共享的,相同的代码在内存中只会有一个拷贝,同时这个段是只读的,防止程序由于错误而修改自身的指令。
初始化数据段(.data):这里存放的是程序中需要明确赋初始值的变量,例如位于所有函数之外的全局变量:int val=100。需要强调的是,以上两段都是位于程序的可执行文件中,内核在调用exec函数启动该程序时从源程序文件中读入。(初始化的全局变量和静态变量)
未初始化数据段(.bss):位于这一段中的数据,内核在执行该程序前,将其初始化为0或者null。例如出现在任何函数之外的全局变量:int sum;(未初始化的全局变量和静态变量)
堆(Heap):这个段用于在程序中进行动态内存申请,例如经常用到的malloc,new系列函数就是从这个段中申请内存。
共享库(libc.so) 

栈(Stack):函数中的局部变量以及在函数调用过程中产生的临时变量都保存在此段中。

 

网络拓扑结构与分层:

网络拓扑结构:总线型、星型、环形、网状、混合型(星型总线、层次)

网络体系结构、分层:应用层(HTTP)、传输层TCP(TCP、UDP)、网络层IP(路由器)、数据链路层Data-link(交换机、网卡)、物理层physical(网线)

 

快速排序的核心思想是基准数就位,每一趟至少有一个基准数就位。

 

临界区:一个访问共用资源的程序片段而这些共用资源又无法同时被多个线程访问的特性。

pc指针:指向当前程序的运行点的地址

读写锁:当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞.

当读写锁在读加锁状态时, 所有试图以读模式对它进行加锁的线程都可以得到访问权, 但是如果线程希望以写模式对此锁进行加锁, 它必须直到所有的线程释放锁.

通常, 当读写锁处于读模式锁住状态时, 如果有另外线程试图以写模式加锁, 读写锁通常会阻塞随后的读模式锁请求, 这样可以避免读模式锁长期占用, 而等待的写模式锁请求长期阻塞.

 

dgb原理:

1、设置断点:    
  信号是实现断点的基础,当用breakpoint 设置一个断点后,gdb会在=找到该位置对应的具体地址,然后向该地址写入断点指令INT3,即0xCC。 
  目标程序运行到这条指令时,就会触发SIGTRAP信号,gdb会首先捕获到这个信号。然后根据目标程序当前停止的位置在gdb维护的断点链表中查询,若存在,则可判定为命中断点。 
  gdb暂停目标程序运行的方法是想起发送SIGSTOP信号。 
   
  2、next单步调试: 

  next指令可以实现单步调试,即每次只执行一行语句。一行语句可能对应多条及其指令,当执行next指令时,gdb会计算下一条语句对应的第一条指令的地址,然后控制目标程序走到该位置停止。

ELF:Linux的可执行文件格式ELF Executable and Linkable Format 可执行与可链接格式

gcc编译的的中间文件:.c .i .S .o

gcc -E test.c -o test.i 中间文件*.i 预处理阶断是对c源码中的预处理代码进行处理

GCC -S test.i -o test.s 汇编文件*.s 编译阶断是将c源码处理为汇编代码

GCC -c test.s -o test.o 机器语言*.o 汇编阶断是将汇编代码处理为二进制代码

gcc test.o -o test 或者 gcc test.c-o test 链接阶断将二进制代码打包成一个操作系统可以识别的可执行文件格式,linux是elf格式,windows上是pe格式

./t 运行阶断,由操作系统的可执行文件加载器负责加载并执行程序

https://www.cnblogs.com/dpf-learn/p/6127750.html

 

小写的s文件,在后期阶段不在进行预处理操作,所以我们不能在这里面写预处理的语句在里面

大写的S文件,还会进行预处理、汇编等操作,所以我们可以在这里面加入预处理的命令

 

同步与互斥:同步是一种更为复杂的互斥,而互斥是一种特殊的同步;互斥是两个任务之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!因此互斥具有唯一性和排它性,但互斥并不限制任务的运行顺序,即任务是无序的,而同步的任务之间则有顺序关系。

pthread_cond_wait在阻塞式等待,这个函数做了以下三步操作: 
1.释放Muxtex 
2.阻塞等待 

3.当被唤醒时,重新获得Mutex并返回

https://blog.csdn.net/someday1314/article/details/68935837

字节对齐问题:

 

*struct 中字节对齐需要满足的条件:

    1、某个变量存放的起始位置相对于结构的起始位置的偏移量是该变量字节数的整数倍;

    2、结构所占用的总字节数是结构种字节数最长的变量的字节数的整数倍。

*union 中字节对齐需要满足的两个条件:

    1、unoin 的大小必须足够容纳最宽的成员;

    2、union 的大小需要能够被其所包含的基础成员类型的大小所整除。

指针相关:

 

C语言中对数组名取地址

https://www.cnblogs.com/caiminfeng/p/4858032.html

 

C语言指针详解

https://www.cnblogs.com/lulipro/p/7460206.html

 

数组指针和指针数组的区别

https://www.cnblogs.com/mq0036/p/3382732.html

 

【C语言】 浅谈指针

https://blog.csdn.net/wbq1480/article/details/51506124

 

图解c/c++多级指针与“多维”数组

https://www.cnblogs.com/chenyangyao/p/5222696.html

 

C专家编程 十三 数组和指针参数是如何被编译器修改的

https://blog.csdn.net/u014572215/article/details/53163802

 

《C专家编程》:指针和数组的区别详解(四)

https://blog.csdn.net/gogokongyin/article/details/51485122

 

二维数组与双重指针

https://blog.csdn.net/u013684730/article/details/46565577

 

C专家编程--指针与数组(二) 数组 指针 联系

https://blog.csdn.net/yusiguyuan/article/details/12357457

分布式与集群的区别:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题
集群:同一个业务部署在多台机器上,提高系统可用性

完全二叉树,求叶子节点的个数 N=n0+n1+n2=n2+1+n1+n2=2*n2+n1+1;由于在完全二叉树中n1等于0或1;可以求得

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值