面试题刷题演练

1.tcp三次握手

2.tcp实现可靠传输的方法

  1. 数据的确认和重传
  2. 合理分包,排序
  3. 数据的校验

3.tcp的拥塞控制

一、拥塞

1、概念:在某段时间,如果对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要发生变化,这种情况叫阻塞

2、拥塞控制:防止过多的数据注入到网络当中,这样可以使网络中的路由器或链路不致过载。(通过拥塞窗口处理网络拥塞现象的一种机制)

        a.前提:网络能够承受现有的网络负荷。

        b.拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低1网络传输性能有关的所有因素。

        c.与流量控制的区别:流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是控制发送端发送数据的速率,以便使接收端来得及接收。

        d.代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源能更好的实现共享。

3.拥塞控制的几种方法

慢开始     拥塞避免       快重传        快恢复  

4.socket编程实现tcp的过程

创建套接字,绑定套接字,监听套接字,接收连接请求

5.https的原理

6.套接字的好处

文件描述符

7.C++ new delete区别

应该是new和malloc

8.C++内存相关

一般就设计堆区,栈区

9.如何理解C++三大特性

封装继承多态

10.AVL树 特性

平衡二叉树,每一个根节点的左子树的深度和右子树的深度不超过1

11.完全二叉树 有n个结点,求深度

具有n个结点的完全二叉树的深度为「log2n」+1

12.链表的特点

手撕代码 快排

进程和线程的区别

  • 根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
  • 在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
  • 所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
  • 内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
  • 包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

ArrayList和Linkedlist的区别

ArrayList是组数,LinkedList是链表

说一下JVM内存模型,

以及垃圾回收算法,

cookie和session的区别

一般只要回答出这一点即可

  1. Cookie 在客户端(浏览器、易伪造、不安全),Session 在服务器端(会消耗服务器资源)。

算法:给定一个矩阵,从左上角开始只能往下或者右走,求到达右下角的最小权值路径

简单的动态规化题目

二面(问的量最大的一次,层层递进让我头皮发麻):

问答:(这个面试官人超级好,我讲不出来还会主动提醒,声音也好听,可惜我也是个男的)

自我介绍

redis数据类型

string list Hash Set

redis缓存淘汰和key过期策略

redis缓存存在的问题(就是击穿雪崩内些)以及解决方法

介绍一下mysql索引

聚集和非聚集索引区别

索引为abc且查询条件为a=xxx order by b时能用上哪个索引

说下http协议,和cookie有关的字段是哪个

 

content-type在传递表单数据的时候是什么值

urlencode是什么

描述java线程池添加任务的过程,一致性哈希是什么

hashmap的底层结构

布隆过滤器是什么

mysql有哪些事务隔离默认的事务级别是什么

算法:LRU写下大概的代码

LRU双向链表加哈希,也是常考的点。

单链表的回文判断要求O1空间

找到链表的中点,将后一部分反转,即可。

三面:

问答:自我介绍,

一道大数据量的题目,A文件有3T,里面放的是uid+uname,B文件2T,里面放的是uid+unage,找出相同的uid并写成uid+uname+uage的样子,限制内存2G

算法:求一棵树的镜像,给我一个List<User>,User有自己的id和父亲的id,要我转成一棵树

实习的待遇还是不错的,大小周,一天340,只不过地点在成都我想回杭州。

问答:线程池的工作流程,项目相关

线程池相关的内容也问的比较多

算法:有序链表的合并

这道题比较容易

二面7.12:

问答:如何实现分布式锁(我只知道redis可以)

一道控制QPS的题(不是很懂这题是啥意思,阿里之前也问过,一直没搞懂,希望有遇到类似的同学分享一下通用的解题思路)

redis和java中原子类自增怎么是实现

算法:手写hashmap的put方法(不考虑扩容红黑的情况)

单链表的反转

经典题目

单链表每k个翻转

这道题目比较难。

 

三面7.23:

问答:无

算法:罗马数字字符串转阿拉伯数字

Leetcode原题, 这道题目把IV这种情况单独考虑即可,不算难

 

递增重复数组找target出现的范围([0,1,1,1,2,3,4,4,5],target为1的话要输出1的起始和结束下标即1和3,我的做法是两次二分

就是标准的两次二分,C++ 可以直接调用upper_bound和lower_bound的函数。

 

 

 

一面

是一个年轻的小哥哥,氛围比较轻松

1、自我介绍;

2、算法题:给一个数字字符串,输出所有的合法IP;

    这道题目有点难度,考察DFS回溯

3、算法题: 求K个有序数组整体的中位数;

    这道题目难度较大。

4、算法题:二维的01矩阵中,找出全是1的最大正方形;

   动态规化题目

5、算法题:三个颜色的球各100个,同一种颜色的球之间没有差别,在这300个球中取100个有多少种取法?

    说了思路,算了半天没算出最后的结果

 

总结,这五道算法题,均有较大难度。

 

6、解释TCP的time wait

TIME_WAIT(2MSL)

确保最后一个确认报文段能够到达。如果 B 没收到 A 发送来的确认报文段,那么就会重新发送连接释放请求报文段,A 等待一段时间就是为了处理这种情况的发生。

7、linux系统中按下ctl c 系统做了什么

发送了一个信号,终止了进程

 

二面

二面面试官上来先自我介绍,好像是做系统架构的,貌似中层领导,太紧张没听清,气场很足

他说话很有逻辑

1、 自我介绍

2、询问实习、在校项目、专业

    我没说太多,因为是跨专业

3、算法题:一个数组中,找出三个数的和为target,找出一组

3sum题目,直接做事件复杂度为O(N^3), 排序双指针,时间复杂度为O(N^2)

4、算法题:二叉树中序遍历的后继节点

剑指offer原题?

    一开始就说了我的思路,但是写的时候修修改改耽误了很久,最后也没写出来,他说思路是这样就没说啥了。

    翻看了一下博客上这道题都会有一个指向父节点的指针,太紧张忘记了他有没有说明了,这道题挺考逻辑的,思路一乱我有些慌

5、问了他部门的技术栈 ,答是Go和python。

 

这一面面完我死心了,表现得太差了,我要是领导绝对就把这种人挂掉,万万没想到,隔一天通知三面

 

三面

1、自我介绍

2、说给我二十分钟完成链表相关的代码填充:1)、完成链表删除函数

    2)、K个有序不重复链表merge成一个有序不重复链表

 

3、 他写了个fork()相关的一段代码,问fork()了几个子进程,打印了几个“1”,我不太会,看循环了两次就说是2了,应该是错的

for(int i = 0; i < 2; i++)
{
    fork();
    cout << 1 << endl;
}

 

4个进程,6个1

4、描述app点击登录后发生了什么?

    我简单描述了客户端、服务器端、http动作,看他还在等我回答,就又说了下http的get\post,中间他问了什么是动态请求、cookie\session

5、问他部门的相关业务,他说这一轮是交叉面,他不是那个部门的,具体的可以之后与部门或HR联系;问他有几面,他说一般三面到四面。

这一轮感觉很友善,很nice

字节跳动游戏研发提前批面经:
一面(一个小时)
Static和const的区别?修饰函数和变量的区别?

Stacic改变作用域为这个程序
指针和引用的区别,什么情况下用指针比较好,什么情况下用引用比较好?

如果要改变指向对象,用指针。
C 多态是怎么一回事?

虚函数,父类指针指向派生类,调用派生类函数
Udp怎么能保证数据按需求到达?
怎么检查内存泄漏和避免内存泄漏需要注意什么?


双链表和单链表相比,有什么不同?

这个题目比较简单
动态规划和递归的区别?

动态规化只是写出转移方程,可以用迭代实现
树的实际使用都有哪些?

黑红树查找
用什么树能排序?

二分查找树堆
虚拟内存是怎么一回事?
TCP和UDP的区别,以及为什么游戏不能用TCP?(MMO)

网关的作用是什么?

 

二面(40多分钟)
说一下悲观锁和乐观锁?

  悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。[1]

  乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。[1] 乐观锁不能解决脏读的问题。

CAS存在的问题知道么?怎么解决?


泛型了解过么?

C++ 模板
泛型是什么时候确定的,编译期还是运行期?

编译
Const和#define的区别?

define不会做类型检查,只展开
要是让你实现智能指针你怎么设计?

智能指针
TCP的三次握手说一下?


四次挥手呢?


Closed_wait怎么回事?产生这个问题的原因是什么呢?

服务器没有来得及发出第三次挥手。
说一下你了解的IO模型吧?

同步阻塞/同步非阻塞/异步非阻塞/
同步和异步的区别是什么啊?

同步,是所有的操作都做完,才返回给用户结果。即写完数据库之后,在相应用户,用户体验不好。

异步,不用等所有操作等做完,就相应用户请求。即先相应用户请求,然后慢慢去写数据库,用户体验较好。

Linux软连接和硬连接知道么?


Awk、sed和grep会么?

这三个命令偏运维
你了解过mysql存储引擎么?
设计模式你平时都用哪些啊?
指令重排你听说过么?
两个有序的数组,让你去找出他们中一样的元素你怎么找?
如果要求空间复杂度为O(1)呢?

再提一下,你知道TCP的SYN攻击么?

 

三面(50多分钟)
STL说一下?

标准模板库,容器,算法,分配器
智能指针怎么设计的?

引用计数
MMO游戏有个很大的地图,其中有NPC,玩家,敌人,怎么存储这个地图和玩家,玩家可能会实时移动?


你的项目中你觉得哪比较满意?


Windows和linux联合编程应该怎么写程序?

跨平台?宏定义的办法写

未来职业规化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值