
C++与C的区别
N1314N
有志者事竟成
展开
-
STL中迭代器的作用,有指针为何还要迭代器(HR常问)
【2】请你来说一下STL中迭代器的作用,有指针为何还要迭代器参考回答:1、迭代器Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模 式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供...原创 2019-06-20 08:39:22 · 3070 阅读 · 0 评论 -
请你来说一下linux内核中的Timer 定时器机制
参考回答:1)低精度时钟Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式:1、系统启动后,会读取时钟源设备(RTC, HPET,PIT…),初始化当前系统时间。2、内核会根据HZ(系统定时器频率,节拍率)参数值,设置时钟事件设备,启动tick(节拍)中断。HZ表示1秒种产生多少个时钟硬件中断,tick就表示连续两个中断的间隔时间。3、设置时钟事件设备后,时...原创 2019-06-28 20:11:13 · 1439 阅读 · 0 评论 -
请问怎么实现线程池
参考回答:1.设置一个生产者消费者队列,作为临界资源2.初始化n个线程,并让其运行起来,加锁去队列取任务运行3.当任务队列为空的时候,所有线程阻塞4.当生产者队列来了一个任务后,先对队列加锁,把任务挂在到队列上,然后使用条件变量去通知阻塞中的一个线程...原创 2019-06-28 20:08:38 · 340 阅读 · 0 评论 -
请你说一下多线程的同步,锁的机制
参考回答:同步的时候用一个互斥量,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去再次等待它重新变为可用。在这种方式下,...原创 2019-06-28 20:07:44 · 452 阅读 · 0 评论 -
server端监听端口,但还没有客户端连接进来,此时进程处于什么状态?
参考回答:这个需要看服务端的编程模型,如果如上一个问题的回答描述的这样,则处于阻塞状态,如果使用了epoll,select等这样的io复用情况下,处于运行状态...原创 2019-06-28 20:06:31 · 1313 阅读 · 0 评论 -
请你说一说异步编程的事件循环
参考回答:事件循环就是不停循环等待时间的发生,然后将这个事件的所有处理器,以及他们订阅这个事件的时间顺序依次依次执行。当这个事件的所有处理器都被执行完毕之后,事件循环就会开始继续等待下一个事件的触发,不断往复。当同时并发地处理多个请求时,以上的概念也是正确的,可以这样理解:在单个的线程中,事件处理器是一个一个按顺序执行的。即如果某个事件绑定了两个处理器,那么第二个处理器会在第一个处理器执...原创 2019-06-28 20:04:46 · 564 阅读 · 0 评论 -
请你来说一说用户态到内核态的转化原理
参考回答:1)用户态切换到内核态的3种方式1、系统调用这是用户进程主动要求切换到内核态的一种方式,用户进程通过系统调用申请操作系统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的ine 80h中断。2、异常当CPU在执行运行在用户态的程序时,发现了某些事件不可知的异常,这是会触发由当前运行进程切换到处理此。异常的内核...原创 2019-06-28 10:04:05 · 2375 阅读 · 0 评论 -
C++中的单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样...原创 2019-07-07 16:06:25 · 292 阅读 · 1 评论 -
请你说一下多进程和多线程的使用场景
参考回答:多进程模型的优势是CPU多线程模型主要优势为线程间切换代价较小,因此适用于I/O密集型的工作场景,因此I/O密集型的工作场景经常会由于I/O阻塞导致频繁的切换线程。同时,多线程模型也适用于单机多核分布式场景。多进程模型,适用于CPU密集型。同时,多进程模型也适用于多机分布式场景中,易于多机扩展。...原创 2019-06-26 09:37:02 · 791 阅读 · 0 评论 -
请你说一说死锁发生的条件以及如何解决死锁
参考回答:死锁是指两个或两个以上进程在执行过程中,因争夺资源而造成的下相互等待的现象。死锁发生的四个必要条件如下:互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源;请求和保持条件:进程获得一定的资源后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时请求阻塞,但该进程不会释放自己已经占有的资源不可剥...原创 2019-06-26 09:34:57 · 939 阅读 · 0 评论 -
请你说一下多线程和多进程的不同
参考回答:进程是资源分配的最小单位,而线程时CPU调度的最小单位。多线程之间共享同一个进程的地址空间,线程间通信简单,同步复杂,线程创建、销毁和切换简单,速度快,占用内存少,适用于多核分布式系统,但是线程间会相互影响,一个线程意外终止会导致同一个进程的其他线程也终止,程序可靠性弱。而多进程间拥有各自独立的运行地址空间,进程间不会相互影响,程序可靠性强,但是进程创建、销毁和切换复杂,速度...原创 2019-06-26 09:32:07 · 465 阅读 · 0 评论 -
HR常问到的vector和list以及deque的区别和各自优缺点
vector和list以及deque的区别各自优缺点:vector:优点:随机存取,即[]操作和vector.at()动态操作,push_back()与pop_back()自动调整内存,节省空间缺点:实现插入与删除操作效率低只能在尾部插入与删除,在头部插入与删除消耗时间规模与容器大小成正比。当动态添加的数据超过默认内存大小时,要进行整体的重新分配,拷贝与释放。list:优...原创 2019-06-04 20:01:27 · 1160 阅读 · 0 评论 -
请你来说一下TCP拥塞控制?
参考回答:发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。过程cwnd的大小呈指数增长,直到...原创 2019-06-29 08:32:06 · 689 阅读 · 0 评论