芽筑说吧 关注:94贴子:1,861

回复:程序员面试遇到的问题

只看楼主收藏回复

初始化
全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。


76楼2018-09-09 21:41
回复
    当局部变量与全局变量重名时,起作用的是局部变量。


    77楼2018-09-09 21:41
    回复
      优点
      数组的特点是:寻址容易,插入和删除困难;
      而链表的特点是:寻址困难,插入和删除容易。
      这个世界上有没有一种能够综合两者优点的,既寻址容易又插入和删除容易的数据结构?
      Yes,它就是Hash表


      78楼2018-09-09 21:41
      回复
        原理
        基本思想:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。


        79楼2018-09-09 21:41
        回复
          当关键字集合很大时,关键字值不同的元素可能会映象到哈希表的同一地址上,即 k1≠k2 ,但 H(k1)=H(k2),这种现象称为冲突,此时称k1和k2为同义词。实际中,冲突是不可避免的,只能通过改进哈希函数的性能来减少冲突。


          80楼2018-09-09 21:42
          回复
            哈希散列方法
            直接寻址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法


            81楼2018-09-09 21:42
            回复
              处理冲突方法
              开放寻址法、再散列法、链地址法(拉链法)、建立一个公共溢出区


              82楼2018-09-09 21:42
              回复
                进程与线程
                1.定义
                进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
                线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。


                83楼2018-09-09 21:42
                回复
                  关系
                  (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
                  (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
                  (3)处理机分给线程,即真正在处理机上运行的是线程。
                  (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.


                  84楼2018-09-09 21:42
                  回复
                    区别
                    (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
                    (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
                    (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
                    (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。


                    85楼2018-09-09 21:42
                    回复
                      优缺点
                      线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。


                      86楼2018-09-09 21:42
                      回复
                        进程间通信
                        (1)管道及有名管道:管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
                        (2)信号:信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
                        (3)消息队列:消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。


                        88楼2018-09-10 15:37
                        回复
                          (4)共享内存:可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
                          (5)信号量:主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。
                          (6)套接字:这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。


                          89楼2018-09-10 15:38
                          回复
                            进程的基本状态
                            1.状态
                            运行、阻塞、挂起阻塞、就绪、挂起就绪
                            2.状态之间的转换
                            准备就绪的进程,被CPU调度执行,变成运行态;
                            运行中的进程,进行I/O请求或者不能得到所请求的资源,变成阻塞态;
                            运行中的进程,进程执行完毕,变成就绪态;
                            将阻塞态的进程挂起,变成挂起阻塞态,当导致进程阻塞的I/O操作在用户重启进程前完成,挂起阻塞态变成挂起就绪态,当用户在I/O操作结束之前重启进程,挂起阻塞态变成阻塞态;
                            将就绪中的进程挂起,变成挂起就绪态,当该进程恢复之后,挂起就绪态变成就绪态;


                            90楼2018-09-10 15:38
                            回复
                              socket连接过程
                              服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
                              客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
                              连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。


                              91楼2018-09-10 15:38
                              回复