目录
6.你的学习目标是什么?还想学习什么技术?
重写与重载。
C++虚函数表,只有虚函数表的对象占据多少内存。
SSO原理。
SSL原理。
访问一个网页,响应很慢,从哪些方面排查问题?如何优化?
I/O多路复用与其他网络I/O模型的区别。
select、poll、epoll
C++内存分布。
Define与const。
情景题:某脚本同时处理一大堆文件,若脚本突然挂掉,如何判断处理到了哪些文件的哪些部分。
有许多八位数的电话号码,设计一个存储方案,用尽可能少的内存,达到比较高效的检索。
按Control-C,发生了什么。
Tornado 为什么那么快。
Python items 和 iter-items的区别。
1. ARP协议?
2. DNS过程
3. C语言.c文件到object
8.Linux终端下按下ctrl+c发生了什么(未答上)
9.PING命令(少许错误)
10.top命令
17.IO机制
18.select和epoll区别
12.JIT是什么,作用
java中有类似cpp的条件变量么
用过kafka对吧,了解kafka吗
搭过集群。producer往broker的特定topic发数据,consumer从topic读数据。
问:知道什么是consumer group吗?
这个问题答得也不好,可能是有点慌了。有点语无伦次,答非所问。
问:kafka的offset怎么管理知道吗?
听错问题了,以为问的kafka集群怎么管理。答zookeeper。。。
追问:除了zookeeper有没有其他方式
答:只用过zookeeper。
问:topic的offset怎么与consumer group对应上的?
乱答一通
问:offset是和什么绑定的?
可能面试官知道我理解错他的意思答偏了,又进一步引导了一下。当时脑子都乱了,说了一些offset的读取策略,也不知道对不对。往文件里面写。
感觉这一块问题还是因为自己平时理解的不够深入,光顾着使用,却忘记总结了。如果基础好的话,不至于那么慌吧。
mysql数据库中Innodb和MyISAM的区别
mysql数据库怎么插入的?
事物是什么?
事物怎么回滚的?里面有什么日志??
Spring IoC是什么?怎么实现的??
Spring IoC里面的反射机制怎么实现的?
Class.forName()怎么执行的??
Redis是什么??Sorted List是什么?skiplist是什么??怎么实现的??怎么插入一个值?怎么进行查询?和其他的数据结构进行对比?
进程与线程的区别,主线程是什么?主线程有什么不一样的地方?
守护线程什么?守护线程怎么退出的?
tcp/udp区别,进程线程区别,操作系统的问题。
有不会的没关系,接着问其他问题。
问问题:外排序,数据库,redis
然后代码:merge k sorted list。
三面:
问题:根据query设计索引,***里存什么。
代码:列表中随机选id。
course schedule III.
简单实现一下LRU?如何优化?(提示了一下用哈希去搜索)
海量数据如何找前1000个?如何优化?(最后提示了一下用分布式)
介绍一下GC?
JVM的内存模型?
老年代经常发生清理,如何调优?
func(List<Fruit> a)能不能传ArrayList<Apple> b?为什么?
Spring IOC的作用?
AOP的作用及其实现方式?
介绍一下四次挥手?为什么要四次挥手?
TCP、UDP区别?
拥塞控制?
进程和线程区别?
进程间通信的方法?
介绍一下事务?
隔离性级别有哪些?你平时用哪个?
索引有哪些?
你知道redoLog吗?(我答知道错误恢复基本原理,然后答了《数据库原理概论》里的部分)
二面:
求二叉树两个最远节点的路径长度?(提示考虑一下在子树内,经过子树的根,且最远路径的两叶子)
Integer == int 发生了什么?
作者:给个offer吧。
链接:https://www.nowcoder.com/discuss/170653
来源:牛客网
一、从数据库开始问起
没有直接问索引,是一点一点引到索引底层知识的。
我是以底层数据页的存储,巴拉巴拉讲了很多关于索引底层的知识,但是没答出来b+树比红黑树好在哪里的所有特性,只答了b+树是矮胖型,中间节点没存放数据减少io磁盘操作。红黑树在极端的情况下性能不好。他问数据库是怎么在磁盘上查询数据的,我不会。
二、操作系统
只问了进程和线程的区别,然后问了线程内部是否也会有资源,我答了有,极力想引导到java语言那边,因为我知道Jvm中线程栈中的存储结构和大致内容,也知道LocalThread。他说了恩
三、计算机网络
问了我知道不知道七层协议等等,我说知道,还没说完就打断了。然后给我场景题,其实是问select、poll和epoll的区别,区别和相关的linux内核知识答出来了,然后他让我说出来着几种模型的实际应用,我没答上来,我说的是根据它们的区别(详细)去选择。
四、算法
10GB数据,只有8MB内存,问如何排序。我首先说的是位图算法,他说不好,内存不够。然后说的分文件,他说这个思路可以,具体怎么做,没答上来
一个数组中0到n,找出重复的数,时间on,空间O1,我本来想的是用异或,结果没弄出来。
总结
啥都没答出来
感觉好心塞
20后台实习到底要什么基础才能过字节跳动一面呢?
为什么一点都没问Java,jvm,我面试的不是java后台吗
面了一个小时多一点,凉了
作者:cres9888
链接:https://www.nowcoder.com/discuss/167508
来源:牛客网
一面
1. 进程
2. TCP拥塞/流量控制
TCP最大连接数
3. MySQL 索引 + 性能
写sql
给条件问怎么创建索引
然后问了点项目的问题。
二面
问了OSI模型和TCP四层,还有JVM问题。
算法
find merged node in two linked list SC - O(1)
最长连续字符串
Kth largest number in BST
三面
三面悲剧了。。写的时候看到提示说面试官关麦了。。一段时间后发现其实视频画面也冻住了😶
全程就一个sql,一个编程解概率题
以前没解过数学问题,卡了一阵,过程中又在不停的重连视频通话。。尴尬。。
写出概率题后,面试官就说没有别的问题了。。这时候网络卡到无法维持画面,只能语音通话。。
好气哦。。
本来已经打算5月份毕业从了另一家公司回国发展了,但是听说了有这样一个机会决定不留遗憾的试试,以下是印象比较深的一些问题
一面:
问的不多,看了楼主的简历问了问一些java基础语法问题,问了下spring的IoC原理
问了个数据库join的问题,两个表各有5行和3行,问inner join的结果最多最少会有几行,我说的是应该是取决于join条件最多的话是3行,最少的话应该是没有匹配0行,但是面试官表示不太正确,这个问题还请牛客大牛赐教
算法题:从右下角开始逆时针输出数组
二面:
二面基础问的很详细
java的集合类hashmap结构
线程与进程的区别
操作系统线程的管理方式(没打出来,跳过)
数据库问了些索引相关的问题(B树,索引使用的场合)
写题:1. 两个线程轮流打印,楼主写了一个用ReentranLock的实现,面试官表示会有自旋过多的问题,后来改用sychronized配合wait notify
2. leetcode 股票问题1
3. O(n)复杂度找未排序数组第k个元素,说了下partition的思路就没具体写了
三面:
基本上就是领导面
上来写题:模拟带权重的抽奖,几何概型用线段长度表示概率,最后随机一个长度落在哪个区域就是哪个中奖,结果存在set里面,set中的元素到了指定值后抽奖结束
问了java高并发的东西,楼主把concurrent包下的工具类挨个介绍了一遍,问了下countDownLatch和CyclicBarrier的区别
最近有关心什么流行的技术
最近看什么书
然后介绍了下部门并打算直接喊hr来面试,但因为hr在面试推到了明天
HR面:
问了问面试体验如何,了解了下一些个人的基本情况
等了一周收到了正式offer。
一些Tips:
很感激牛客网这样的一个平台,在这里呆了一年的时间,在别人的面经中不断差缺补漏,觉得收获良多,其实面试到后面基本题部分基本上就是大部分面经所总结的那些题目,并无太多花样,倒是算法题需要多写多想保持手感,关键时候才能很快所想变所写
HR面的时候HR问我面试是如何准备的,我说基础的部分就是多看多写,实战的部分就是一个心态进步的过程,最开始的面试都会很怕很紧张,但是后来逐渐告诉自己面试就是一个和高手过招交流的过程,在和别人的交流中逐渐理解自己的差距和改进之处,就算不能进入下一轮,也是一个成长的过程。这是我的真实感受,相信不少人会有同感
最后祝愿大家都能早日收获满意的offer
作者:fcj2113
链接:
https://www.nowcoder.com/discuss/181327
来源:牛客网
头条上海一面 4.20 10:00
项目相关
lucene倒排索引原理
lucene如何实现多条件查询
中文分词器的数据结构
如何实现web数据安全传输 TLS
AES和RSA实现原理
utf-8和GBK编码区别
如何设计一个编码规则能包含所有文字
JUC包内容,atmoic类、ABA问题、AQS介绍
lamada表达式(仅仅只是语法糖么?)
Java Stream API
匿名内部类是否会编译成class文件
手撕算法(类似LRU,淘汰最后访问时间戳在某阈值之前的项)
头条二面 4.20 11:20
权限管理RBAC如何实现
如何实现一个http client
jwt介绍,jwt和cookie、session对比的优劣势
从输入url到页面展示发生什么
三握四挥及状态转化
手撕算法 判断二叉树是否对称、N的阶乘末尾几个0
头条三面(凉凉) 4.20 14:00
项目若实现高并发如何改进
消息队列介绍以及应用场景
异步化了解吗
如何自己实现可变大小的线程池(不用java包)
java如何查看线程死锁
jvm调优
maven出现循环依赖如何解决
linux查看CPU、内存、磁盘、IO的命令
如何安装rpm包,yum安装不存在软件源如何处理
日志中寻找含有JAVA字符的行数
如果不区分JAVA大小写的命令?
Shell脚本会写不?
口述算法:10G文件,每行一个字符串,2G内存,找出互为逆序的字符串对的数量(abcde,edcba)
三面视频刚挂,reject短信来了 TAT
总结一句:还是太菜,面啥挂啥,请叫我挂面小王子 TAT
作者:offer倒手
链接:
https://www.nowcoder.com/discuss/181406
来源:牛客网
等了两个多小时,没有手撕代码。。。几次面试都没有手撕代码,心态崩了,跪求手撕代码
一、自我介绍
二
1、熟悉哪个编程语言
2、Java中有哪些锁,对锁的理解
3、实现Java的RLock WLock RULock UWLock
4、用Java实现一个信号量
5、HashMap的是如何实现的,HashMap能否用null作为key和value
6、ConcurrentHashMap与HashMap的区别
7、ConcurrentHashMap是如何实现线程安全的(CAS,当时忘了)
8、数据库的四种隔离级别,MySQL RR级别(这里面试官说这个是读已提交,其实是可重复读repeatable read)能否保证同一个事务的多次范围查询结果相同
到目前为止,所有的面试都凉凉了,0offer
作者:leeeeooop
链接:https://www.nowcoder.com/discuss/181358
来源:牛客网
1面:
2.volatile修饰符的作用
答:volatile保证线程对该变量的可见性,根据JMM模型每个线程都有一块抽象私有的本地内存区域,该区域与主内存进行交互(当对volatile变量进行写的时候,会是其他线程的内存中存储该变量的值失效)
3.能不能写一个函数,由于指令重排序导致其输出的结果不是想要的
4.解释下happen-before的规则
1.进程与线程的区别(这个不太清楚)
答:一个进程可以有多个线程,一个线程只能属于一个进程。进程的上下文切换的代价比较大:因为进程切换时,会导致高速缓冲区失效;线程上下文切换时,只需要替换程序计数器,还有线程私有内存区就行了。
2. 进程切换还需要改变什么
答:进程还需要保存打开文件的状态描述符
3,线程进行替换时,哪些东西会变
4.了解过一些中间件吗,例如负载均衡,数据库,分布式
答不太清楚
5.了解过b树与b+树的区别吗(我需要好好梳理一下)
答b树的非叶子节点存储索引和数据,而b+树只在叶子节点存储
6.为什么b+树需要这么做
答与磁盘的IO读取有关,balala,不需要说到了b+树类似平衡树(感觉面试官开始怼了)
7.那么二叉平衡树也可以在非叶子节点存储索引,叶子节点存储数据。两者有什么不同
答b+树叶子节点用了链表
8.那么二叉平衡树在叶子节点加链表。两者有什么不同
答b+树是多叉树,这样可以减少树的深度
9.了解隔离性
答只知道有四种隔离
10.算法题: 将一个字符串改变其字符(假设需要将字符x变成y,则y也需要变成x),使其与另一个字符串相等
例子 字符串1: aabba -> 字符串2: eeffe //这里 字符串1a变成e,然后该字符串中如果存在e,也要把它变成a 这个返回ture
字符串1: asdf -> 字符串2: asag 返回false
11.工程题:
给你一个大的Hash文件,对其进行快照,获得该时刻文件的快照。 要求在快照过程中,还可以将数
据写入该文件中,或者修改该文件中的值。
答:建立一个缓冲区,把那些要改的数据和要更新的之前数据发到缓冲区里面(估计不对) 大佬,求答案!求答案!
一些建议,凉凉
一面
2. 概念题:解释 分布式、微服务、负载均衡、高可用
3. http是有状态还是无状态? TCP是有状态还是无状态?
4. 客户端禁用cookie怎么办? 你说的实现方式安全吗?
5. SSL,http和https,https是有状态还是无状态?
6. String为什么设计成final不可变? 是怎么实现不可变的?
7. 自己能实现一个不可变的类吗?
8. equals 和 hashcode 为什么要一起重写?如果不重写hashcode会出现什么问题?
9. hashmap插入的时候,哈希冲突解决? 查找的时候,哈希冲突怎么解决?
10. hashset是怎么实现的? hashmap是怎么实现hashset的?
11. 多线程:并发和并行,原子类,CAS操作
12. mysql的索引:B+树底层实现?B树的底层实现?为什么要用B+树而不用B树?
13. 最左前缀匹配具体是怎么实现查找的?最左前缀匹配用了B+树的哪些特性?
14. (a,b,c)联合索引,为什么不能单用(b),而一定要用(a,b)?B+树是怎么实现的?
15. 什么是幻读,不可重复读?这些概念是在事务内还是事务外? 事务内
16. mysql怎么实现可重复读?设置了可重复读隔离级别底层是怎么实现的? (MVCC)
17. 了解MVCC吗?怎么实现的?什么是快照读?快照读能读取到最新的吗?快照读和当前读的区别?
18. synchronized和reentrentlock哪个效率高?
2.
3. 为啥B+树最后叶子节点需要用链表相连接? 便于区间查找
JUC:
线程安全类有了解吗,就答 HashTable,CHashMap 等等,然后问 AQS 了解吗,讲道理,还没有完整的了解过,我就扯了 CAS,锁啊什么的一堆
一面:
1.链表数组区别
数组:
一、数组的特点:
1.在内存中,数组是一块连续的区域
2.数组需要预留空间
在使用前需要提前申请所占内存的大小,这样不知道需要多大的空间,就预先申请可能会浪费内存空间,即数组空间利用率低(数组的空间在编译阶段就需要进行确定,所以需要提前给出数组空间的大小(在运行阶段是不允许改变的))
3.在数组起始位置处,插入数据和删除数据效率低。
插入数据时,待插入位置的的元素和它后面的所有元素都需要向后搬移;删除数据时,待删除位置后面的所有元素都需要向前搬移
4.随机访问效率很高,时间复杂度可以达到O(1)
因为数组的内存是连续的,想要访问那个元素,直接从数组的首地址处向后偏移就可以访问到了
5.数组开辟的空间,在不够使用的时候需要扩容,扩容的话,就会涉及到需要把旧数组中的所有元素向新数组中搬移
6.数组的空间是从栈分配的
二、数组的优点:
随机访问性强,查找速度快,时间复杂度为O(1)
三、数组的缺点:
1.头插和头删的效率低,时间复杂度为O(N)
2.空间利用率不高
3.内存空间要求高,必须有足够的连续的内存空间
4.数组空间的大小固定,不能动态拓展
链表:
一、链表的特点
1.在内存中,元素的空间可以在任意地方,空间是分散的,不需要连续
2.链表中的元素都会两个属性,一个是元素的值,另一个是指针,此指针标记了下一个元素的地址
每一个数据都会保存下一个数据的内存的地址,通过此地址可以找到下一个数据
3.查找数据时效率低,时间复杂度为O(N)
因为链表的空间是分散的,所以不具有随机访问性,如要需要访问某个位置的数据,需要从第一个数据开始找起,依次往后遍历,直到找到待查询的位置,故可能在查找某个元素时,时间复杂度达到O(N)
4.空间不需要提前指定大小,是动态申请的,根据需求动态的申请和删除内存空间,扩展方便,故空间的利用率较高
5.任意位置插入元素和删除元素效率较高,时间复杂度为O(1)
6.链表的空间是从堆中分配的
二、链表的优点
1.任意位置插入元素和删除元素的速度快,时间复杂度为O(1)
2.内存利用率高,不会浪费内存
3.链表的空间大小不固定,可以动态拓展
三、链表的缺点
随机访问效率低,时间复杂度为0(N)
总结:
对于想要快速访问数据,不经常有插入和删除元素的时候,选择数组;对于需要经常的插入和删除元素,而对访问元素时的效率没有很高要求的话,选择链表
2.写链表翻转(代码)
参考:LeetCode206、92
3.合并k个有序数组(代码)
参考:LeetCode21、23
0