-------------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)什么时候需要使用“常引用”?
当不想自己传入的实参被改变时
6.在( CE )情况下适宜采用inline定义内联函数。(多选题)
A、 函数体含有循环语句
B、 函数体含有递归语句
C、 函数代码少、频繁调用
D、 函数代码多、不常调用
E、 需要加快程序执行速度
7.如何判断一段程序是由C 编译程序还是由C++编译程序编译的?

1)如果编译器在编译CPP文件,那么_cplusplus就会被定义。_

如果是一个C文件在被编译,那么 STDC 就会被定义, _STDC_是预定义宏,当他被定义后,编译器将按照ANSIC标准库编译C语言程序

   #include<stdio.h>int main(){#ifdef__cplusplusprintf("c++");//若编译了__cplusplus就是C++,打印c++#elseprintf("c");//若没编译__cplusplus就是C,打印c#endifreturn 0;}

2)c中没有重载函数,当c++写了有重载函数时,在函数对应的入口就有区分(注意:由于main函数是整个函数的入口,故main函数是不能有重载的)

方法:通过nm来查看函数名入口,如一个函数为int inRecvMsg(int sfd,int Num)

c编译 inRecvMsg 0x456xxxxx
c++编译 inRecvMsg(int sfd,int Num) 0x456xxxxx

8.函数重载的原理是什么?(举例:如void swap ())

1)c++语言编译先改写,名字改写原理为名字改写(name mangling)

void swap (int a,int b); void swap (float a,float b);
重命名改写为 _swap_int_int 重命名改写为_swap_float_float

2)编译器会根据传入的实参和去匹配改写后的函数名字如_swap_float_float,叫做重载决议(Overload Resolution)
9.inline函数与带参数的宏定义的区别?

类型 带参数的宏定义 内联函数
区别 ①容易出错,预处理器在拷贝代码时常常产生想不到的边际效应
②宏不可调试,但内联函数可以调试
③无法操作类的私有数据成员
④预处理阶段进行的的文本替换,不安全,bug会从预处理带到运行时
⑤宏定义没有开销,提高了程序的执行效率
①既具备宏代码的效率,又增加了安全性,还能自由操作类的数据成员
②函数被内联后,编译器就可以联系上下文对代码结果进行更深的优化
③函数调用时用函数体代替调用
④函数调用有开销
  1. vs与Linux内存分配的方式是不是一样的?有什么区别?
    ①不一样
    ②Linux的内存分布,用户态空间地址从小到大依次是:文字常量区、全局/静态区、堆区、栈区。

③vs的内存分布,用户态空间地址从小到大依次是:栈区、堆区、文字常量区、全局/静态区。

以下问题待解答:
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关键字用法

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

1.隐式类型转换知道吗?
int m = 3 + 35.6;
3.深拷贝和浅拷贝知道吗

1.浅拷贝
浅拷贝:拷贝出来的对象仍然保留原有对象的所有引用。
特点:只要任意一个拷贝对象(或原有对象)中的引用发生改变,所有的对象都会受到影响;
2.深拷贝
深拷贝:拷贝出来的对象产生了所有引用的新的对象。
特点:修改任意一个对象,不会对其他对象产生影响;

7.unique_lock和lock_guard的区别
管理锁,unique灵活性更强,但是占用内存多,效率稍低于lock_guard,但是完全可以取代lock_guard
项目中用的类包装pthread_mutex_lock()和pthread_mutex_unlock();//

8.HTTP长连接和短连接,区别,长连接有什么好处
区别:在一些业务需要对外保密的企业,一般禁止内部员工通过除浏览器以外的客户端访问外网,企业内部会安装安全软件,这类软件会过滤HTTP以外的所有数据包,为了适应这种场景,会使用长连接

9.pthread_cond_wait()
上半部:在条件变量上登记、解锁、睡眠
下半部:从条件变量上醒来,加锁(若这把锁正在使用,则一直等待这把锁解锁),若这把锁没使用就加锁成功,从pthread_cond_wait()返回

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

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,消息队列,共享内存+信号量,套接口**

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怎么查看线程

-------------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.位运算

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

1.帧同步
(1)定义:帧同步可以说是通过帧率延伸过来的,你可以把一个游戏看成一个巨大的状态机,所有的参与者都采用同一个逻辑帧率来不断的向前推进。


(2)图片说明:图中是A、B、C三个玩家的时间轴,这个时间轴不是电脑上的本地时间,而是A、B、C联机时定义的一个时间轴。虚线分隔出来时间片称为turn,可以理解成一帧。箭头表示该玩家将自己的操作指令广播给其他玩家。
(3)补充
1)我们把游戏的前进分为一帧帧,这里的帧和游戏的渲染帧率并不是一个,只是借鉴了帧的概念,自定义的帧,我们称为turn。游戏的过程就是每一个turn不断向前推进,每一个玩家的turn推进速度一致。
2)每一帧只有当服务器集齐了所有玩家的操作指令,也就是输入确定了之后,才可以进行计算,进入下一个turn,否则就要等待最慢的玩家。之后再广播给所有的玩家。如此才能保证帧一致。
3)Lockstep的游戏是严格按照turn向前推进的,如果有人延迟比较高,其他玩家必须等待该玩家跟上之后再继续计算,不存在某个玩家领先或落后其他玩家若干个turn的情况。使用Lockstep同步机制的游戏中,每个玩家的延迟都等于延迟最高的那个人。
4)由于大家的turn一致,以及输入固定,所以每一步所有客户端的计算结果都一致的。(一卡大家都卡)
(4)帧同步的断线重连:采用“定时不等待”的乐观方式在每次Interval时钟发生时固定将操作广播给所有用户,不依赖具体每个玩家是否有操作更新,当客户端有操作的时候及时的发送服务器,然后服务端每秒钟20-50次向所有客户端发送更新消息,并且保存客户的信息

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、遇到的困难,怎么解决。

面试题集合(待续更新5/8)相关推荐

  1. Vue2.0面试题集合

    Vue2.0面试题集合 1.active-class是哪个组件的属性?嵌套路由怎么定义? 答:vue-router模块的router-link组件. 2.怎么定义vue-router的动态路由?怎么获 ...

  2. 2021-Java面试题(03-29已更新)

    前言 从2021-02-18日开始,收集面试题,坚持更新,加油!!! 面试题 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 ...

  3. 2022年5月份面试题集合

    没回答上来或者回答的不够好的面试题集合 目录 Java Java基础 接口和抽象类的区别? 深拷贝和浅拷贝区别了解吗? Java集合 介绍一下HashMap? ArrayList的扩容机制是什么样的? ...

  4. 面试1:Java、微服务、架构常见面试题(持续更新中)

    Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...

  5. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18)

    1.android开发新浪面试题[开发者必看哦] 下载地址 http://www.eoeandroid.com/thread-177885-1-1.html 2.华为关于android笔试题案例解析 ...

  6. linux 将test.log中第1行的所有都替换成,【Linux面试题7】三剑客笔试题集合

    三剑客笔试题集合 一. 三剑客-基础部分题目 1. 选择 1.在给定文件中查找与条件相符字符串的命令及查找某个目录下相应文件的命令为:(多选)(AC) A:grep B:gzip C:find D:s ...

  7. DL:关于深度学习常用数据集中训练好的权重文件(Deeplab v3、MobileNet、InceptionV3、VGG系列、ResNet、Mask R-CNN )下载地址集合(持续更新)

    DL:关于深度学习常用数据集中训练好的权重文件(Deeplab v3.MobileNet.InceptionV3.VGG系列.ResNet.Mask R-CNN )下载地址集合(持续更新) 目录 基于 ...

  8. Github | 备战秋招,最全面试题集合!

    最近很多大厂已经开始开始了校招提前批,2020届的同学们可以赶紧启动啦-社招的情况也不容乐观,除了之前的一大波裁员新闻,现在更多的是收紧HC,做人才盘点,各个厂的HC不会像以前那么多了.我在Githu ...

  9. 【Android面试】Android面试题集锦 (陆续更新)

    [Android面试]Android面试题集锦 (陆续更新) 分类: [杂七杂八]2011-05-11 17:58 2064人阅读 评论(0) 收藏 举报 一些常见的Android面试基础题做下总结, ...

  10. java面试题:集合_Java:选择正确的集合

    java面试题:集合 这是在您的应用程序中选择Set , List或Map的正确实现的快速指南. 最好的通用或"主要"实现可能是ArrayList,LinkedHashMap和Li ...

最新文章

  1. A Horrible Poem(bzoj 2795)
  2. layui 自定义排序_浅谈layui中table的sort排序
  3. 恢复mysql数据库详细图解_binlog恢复mysql数据库超详细步骤
  4. 再见切赫!斯坦福桥“坦克兵”不止是蓝军传奇
  5. distinct过滤掉重复记录并且显示所有字段_MySQL的所有姿势,我都帮你准备好了...
  6. FireBug 调试JS
  7. k8s核心技术-Service概述_Service如何实现负载均衡_提供虚拟IP_以及Po的IP注册和发现---K8S_Google工作笔记0031
  8. Swift中的Masonry第三方库——SnapKit
  9. java 将汉字编码_JAVA中的汉字编码问题
  10. 尚硅谷大数据Spark之RDD转换算子学习笔记及面试题
  11. 台达伺服b3参数_台达ECMA伺服马达规格参数表
  12. 全加器在计算机的应用,利用全加器构成3位并行加法器.doc
  13. INVECAS发布全球首创的HDMI(R)2.1,搭载HDCP2.3芯片和IP解决方案,适用于电视、AVR、条形音响和机顶盒
  14. CSS - 让整个页面变成灰色(一行代码)
  15. 图的遍历——深度优先搜索和广度(宽度)优先搜索(含例题)
  16. ubuntu下bochs的安装和配置
  17. Java闭关修炼64课 很适合新手学习的JAVA视频教程
  18. oracle中的blob类型,clob类型,nclob类型主要区别是什么
  19. CMMI之度量与分析(MA)
  20. 风扇--DLTAP703SC--单片机--杰力科创

热门文章

  1. 解决W10桌面文件夹无法解密
  2. js 中 对 复杂数组(包含对象)的去重, 但是 NaN和 null 是无法排除的
  3. 【暑期每日一题】洛谷(一)
  4. precede和previous_一直在背单词过程中迷茫,死记硬背还是词根词缀?
  5. php 正则去除空格,php 正则去掉
  6. YTU.2244: 背包问题(栈和队列)
  7. SAP 如何从维护视图中取数
  8. 【AI每日播报】意念控制特斯拉 AI看漫画
  9. 我的梦想是当一个计算机英语,my dream(我的梦想)英语作文带翻译
  10. 关于es的一些默认限制解除