面试题集合(待续更新5/5)

---------------------未知

1.隐式类型转换知道吗?—不知道,只知道强制类型转换(后来想想似乎课上讲过…)
3.深拷贝和浅拷贝知道吗
5.缓冲区实现,为什么不使用循环队列
7.unique_lock和lock_guard的区别
8.HTTP长连接和短连接,区别,长连接有什么好处

-----------------排序和查找

20.说说排序的方法和效率
2、快排说一下,快排思想 算一下快排复杂度,计算过程。***
3、堆排,***
4、归并**
20.说说排序的方法和效率**
21.哈希冲突怎么解决呀?…
21.红黑树了解吗?…(和平衡二叉树比较了一下查找、插入和删除复杂度)
22.如何判断图的联通性呢?(dfs,bfs,并查集)…那你知道并查集是怎么实现的吗?—不知道,不好意思。
23.最小生成树知道吗?—不知道。

--------------------设计模式

5、知不知道设计模式(不知道)
2.组合和继承怎么用?—不会
3.单例模式了解吗?
4.写一下多线程下的单例模式吧,就写一下getInstance吧!…

--------------------网络编程11

参考网站1;
https://blog.csdn.net/heibaikong6/article/details/88031398?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162010917716780274135145%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162010917716780274135145&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-8-88031398.first_rank_v2_pc_rank_v29&utm_term=%E5%90%89%E6%AF%94%E7%89%B9%E9%9D%A2%E8%AF%95

参考网站2;
http://cache.baiducontent.com/c?m=DMig-8Gbx32BvhU2PpZWWg8LyugnI7dqmUaBGhWHCu5iZC1mxxH_qF0HojXorqWYNVwqmoVEEwJB-87elKNZ0NLu2UqrjRuI-1zc4ij9lypxJpNqPRIb-9b84Qjc77YiX522dr_q06uR1jdB0nLvgeh_YSTNtpBxEXcsWFchoc9tHNZW39SG4fITaUZFmyCxf3aV-QmZw_NEtOENE4H8nm1R-W5le-n2H5c3Rh4MJh6RluqaV7TAlgk2AUeYEQlR&p=882a931783855bb306be9b7c48&newp=8b2a971e86cc47b413a7ca625253d8224216ed6538d7c44324b9d71fd325001c1b69e7b020261705d3c07b6c06a94b5ee8f43c78341766dada9fca458ae7c473&s=45c48cce2e2d7fbd&user=baidu&fm=sc&query=https%3A//www%2Ejianshu%2Ecom/p/ff26312e67a9&qid=d05622b0000bac91&p1=1
7、说一下多线程,多线程要注意什么问题,
22.网络编程接触过吗,说说他们的几个步骤**
11、进程通信说一下(答出来三个,然后问还有吗,不知道了)
17。进程间的通信方式,
无名管道,FIFO,消息队列,共享内存+信号量,套接口**
面试题集合(待续更新5/5)_第1张图片

23.tcp中如何知道对方数据已经发送完
3、拆包封包流程,为什么要做这步,什么导致了粘包。**
6、close_wait是什么情况出现,大量出现close_wait怎么办**
3、CPU超线程。
10、TCP握手说一下
15、time_wait **
16、tcp四次挥手过程
17、为什么三次握手
19.IO 多路复用的几种系统调用(select、poll、epoll),主要区别;
20.监听未完成的连接时(listen阶段),如何防止DDoS;
22.两个线程交叉打印A和B
23.你的线程池是怎么实现的
24.epoll_wait的最后一个参数是什么意思,如果设置为0会怎样

----------------数据库

https://www.cnblogs.com/remember-forget/p/6140112.html
2、数据库优化注册流程。
6、MySql B+树介绍,为什么B+树。**
4、MySql 读写分离。
12、mysql索引说一下(答崩了), MySql索引建立了能干嘛,MySql索引建立的原则 **
13、mysql事务说一下
14、mysql视图说一下(答不太对)
15、SQL注入说一下(答错了)
16、网络中IO模型(不知道)
8、Redis了解吗?说一下有多少种类型(不会,不知道)
Redis 的 sorted set 底层的数据结构(跳表),原理;**
9.MySql数据库扩表方案,三种,预留字段,写成kv的形式再进行,行转列。例如 uid,key,value的表。然后进行行转列即可。还有看服务器开发大佬们常用的方法,写个新表,写三个触发器,然后闲暇时间将原表的内容插入新表,然后改名字就好了。*
10.MySQL的持久化手段,比如执行update 语句时,如何保证数据持久化:答了redo log,binlog,undo log等等;
11.Redis有哪些对象,什么情况用什么对象
12.怎么从很大的log文件中查找某个记录
13.gdb怎么查看某个线程
14.怎么查看进程,你会关注top命令的哪些字段
top怎么查看线程

-------------C++

1.new和malloc的区别

类型 new malloc/free
区别 ①new不仅申请空间,而且对空间进行了初始化,还可以赋值②new/delete是C++的表达式 ①malloc只能申请原始的堆空间②malloc/free只是C里面的库函数
联系 都是用来申请堆空间,都要成对使用,否则会有内存泄漏

2.const关键字与宏定义的区别是什么?

区别 宏定义 const关键字
编译器处理方式不同 宏定义是在预处理阶段展开,做字符串的替换 const常量是在编译时
类型和安全检查不同 宏定义没有类型 会有类型安全检查
是否分配内存 不分配内存 分配内存

3.malloc的底层实现是怎样的?free是怎么回收内存的?
1)C标准库malloc的底层实现
①使用原理是分离适配
②当要分配一个块时,确定了要分配的块大小时,对适当的空闲链表做首次适配
③当没找到足够大的,就向操作系统请求额外的堆储存器分配一个合适的块(当释放一个块时,我们执行
合并,讲空闲块放在空闲链表中)
2)free是怎么回收内存:free(stat)
①若stat为NULL,则不会有任何事情发生
②stat所指的内存将会被回收
③若stat所指向的内存空间已被回收,会发生错误
4.(面试常考)区分以下概念:内存泄漏、内存溢出、内存踩踏、野指针?
①内存泄漏:分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃
②内存越界:向系统申请一块内存,使用的时候超出了申请的范围
③内存踩踏:也是内存重叠,一般在拷贝过程中覆盖了不属于该空间的内容
④内存溢出:想要的内存超出了系统能够提供的
⑤野指针:指向被释放内存或是访问受限内存的指针
5.(面试常考)引用与指针的区别是什么?并且将"引用"作为函数参数有哪些特点?在什么时候需要使
用"常引用"?
1)

区别 引用 指针
①即变量本身,只是变量的别名②定义时必须初始化,且不能更改 ①自己有独立的空间,存储指针指向的地址
②指针可以有多级,引用只有一级
③定义时不用初始化

2)讲引用作为函数参数的特点:
对形参操作就是对实参操作,引用作为形参不占额外的内存空间,清晰明了
3)什么时候需要使用“常引用”?
当不想自己传入的实参被改变时

1.要求实现时间跨度为一天的定时器,插入时间复杂度O(1),定时不需要很精确,.定时器为什么要用最小堆,定时器除了小根堆,还可以怎么做,Linux内核是怎么实现定时器的(应该是这么问的吧。反正当时没答上来)***
3.面向对象三大特性
4.什么是多态
5.多态实现原理,虚表指针,虚函数表
1、多态
2.模板知道吗?…不知道,只知道vector、map、unorder_map等都是模板
2、虚函数怎么实现
3、虚函数表在哪
4、虚函数怎么做替换的
5、纯虚函数作用
6、为什么析构函数用虚函数,为什么析构函数一定要设置成虚函数,构造函数可以是虚函数吗?析构函数呢***
(说不一定要设置成虚函数,因为有些类在设计结构的时候不可能有子类了,这个时候不设置也行,)
1.C++ 友元是什么。
8、说一下静态成员变量
9、内存泄露,怎么解决内存泄露,内存泄漏说一下,怎么处理。有什么避免内存泄露的方法吗**
18.const的用法,函数后加const**
形如:
std::string function() const;
这个const的含义是让这个成员函数不能对类的其他数据成员进行修改,也不能调用非const成员函数
参考博客: http://blog.csdn.net/ranyongqing/article/details/25594795
19.static的用法:什么情况会导致程序崩溃,static关键字怎么理解的…
24.说说宏的用法
2.写个智能指针,智能指针知道吗?…(shared_ptr,unique_ptr,weak_ptr)…计数器…禁止拷贝和赋值操作…那unique_ptr底层是怎么实现的呢为什么就禁止拷贝和赋值呢?(填坑:https://www.cnblogs.com/yocichen/p/10561615.html)—不知道,那weak_ptr怎么用的呢?…只知道和shared_ptr好像是一起用的。
25.手写代码,单例模式,不用锁怎么写
26.手写代码,找出数组中最小的重复数字
27.extern关键字用法

-------------linux部分

25.Linux文本去重的命令
2、Linux查看cpu占用率的命令。
3、Linux ps命令。
4.ipcs 查看 ipc 对象;
4.怎么看内存情况:free -h ;(刚好面试前看到了,你说巧不巧)
5,Linux 用什么命令看 tcp 的状态信息:netstat;
6.sleep() 等定时机制,定时精度是由什么因素决定的?怎么实现?
7.一个文件去除重复行…(我问这个文件大吗?-先从小的说起)…Linux中 sort | uniq > .,awk ‘!x[i++]’ Windows中可以用map来存,逐行查找…那这个文件很大怎么办?大到内存装不下怎么办?-(我问可以给点提示吗?-利用外存)…最后还是认怂,不知道了。
8.解释top命令右上角的三个数字
9.top命令怎么查看线程

-----------算法

1.LRU称是Least Recently Used,即最近最久未使用,怎么实现的LRU,到具体细节。
6、说一下BFS
21.算法设计的设计思路,比如说动态规划,分治
7、排行榜怎么实现。跳表介绍一下。扩展说了做排行榜的时候用过,然后深入说了细节**
8.红黑树和avl树差别。
7、红黑树特性。
8、红黑树查找速度。
4、avl树是什么结构,让我说一下怎么插入,插入后怎么旋转,旋转根据什么旋的**
5.倒转单链表(在原链表上倒转)
6.数字1-N 分布在长度为N+1的数组里面,一个元素重复1次,请求重复的元素?
时间复杂度O(N) 空间复杂度O(1)-》》用异或来做就完事了
7.手写代码,跳台阶
8.手写代码,链表反转
9.讲一下协程
如果要把协程应用到你的项目里,该怎么做
10.惊群问题
12,手写代码,twosum
13.手写代码,threesum
14.让你实现一个哈希表,怎么做(当时按照Redis中哈希表的实现原理回答)
15.手写代码,有一个无序数组,找到子数组使得子数组所有元素之和大于给定的数,并且子数组是最短的那个
16.鸡蛋掉落问题
17.位运算

------------------游戏

2、我的项目要是玩家掉线,要怎么重连,我解释了帧同步和状态同步的区别,以及各自的重连方法
1、问了碰撞检测的方法。答了挺多种方法的,物理碰撞,对固定的物体进行预处理,做双线性插值判断是否碰撞,对活物做AOI,或者四叉树算法。
3、卡帧怎么处理。
4、怎么断线重连的。
5、帧同步实现方法。

------------------消息队列

1.Kafka 原理,怎么保证高可用、高性能:分区、主从备份、顺序IO、每个消息只在分区主节点保存一份等等;

2、堆排(往死里问的那种,还挖坑,前面还能应答,然后死了)
3、hash?答出来后,怎么解决冲突?答出来后,怎么优化?答出来后,拉链法怎么优化(然后死了)
4、说一下最小生成树,说出来后,写个并查集。(写出来了)
5、智能指针说一下。(说出来了unique_ptr,share_ptr,weak_ptr,然后问unique_ptr怎么实现,说拷贝赋值,拷贝构造私有)
6、share_ptr怎么实现。(说了一下,然后给我一个场景,这个场景你怎么写share_ptr相当于找了个反例让我的代码不行了。)
7、然后给我一个场景题,我有一个很大的文本,我要去除重复行(我分两部分,内存存的下,内存存不下,第一个直接hash去重,第二个分开hash,然后被他举了一个反例搞炸了)
8、智力题(那个时候思考不出来了扑街)
9、问我看什么书。我说redis设计与实现,然后我说了一个跳跃表,被问扑街。
10、遇到的困难,怎么解决。

你可能感兴趣的:(刷题,面试,数据库,redis,mysql,linux)