1.发起Http请求涉及哪些协议
TCP, DNS, IP, ARP等
2.TCP,UDP区别
3.面向报文面向连接
4.哈希表的有序怎么保证
在维护一个链表,记录key
5.redis数据类型,zset讲一下
有序集合,底层是跳跃表
6.HashMap原理,线程安全问题,ConcurrentHashMap原理,Hashtable
7.Synchronized
同步关键字,可以修饰代码块,以及修饰方法
8.MySQL索引原理,为什么用B+树不用B树
B+ 树数据全在叶子节点,可以存放更多的数据
9.红黑树
10.TCP四次分手原理
11.如何实现可靠的UDP
12.tcp无状态
13.cookie,session,密码设置过期时间并确保安全性,怎么用sessionID和cookie确保
14.http和https,ssl加密解密原理
15.优先级队列
16.设置一个id生成器 唯一且不可以递增
17.数据库隔离级别
18.可重复读怎么实现的 然后给出了一道InnoDB可重复读级别的题
写的部分:
1.循环递增数组输出最小值的下标
2.查找第一个缺失的正整数
3.复杂链表的复制
剑指offer原题
4.对2000万高考考生总分进行排序
桶排序
5.给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata,问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,
返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3。
6.二叉树的蛇形遍历
7.MySQL查询男性平均年龄最大的城市,给了id,name,sex,city,写语句并设计索引
8.AB赌博,A赢2局或以上获胜,B赢3局或以上获胜,求A,B获胜概率
9.不公平硬币,有没有正反面概率相等的时候
spring用到了哪些设计模式;
了解spring
你了解的设计模式有哪些?介绍一下都有哪些应用场景;
事务的传播属性和隔离级别
虽然可重复读理论上会导致幻读,但InnoDB中采取了什么机制来避免这种情况的发生。
Redis的底层数据结构是怎么样的
写一个线程安全的懒汉式的单例模式
jvm的内存分配是怎样的
survivor To 和 from 的内存大小为什么默认是1:1
一:Java基础
String 类能被继承吗,为什么
不能, final关键字
String, Stringbuffer, StringBuilder 的区别
String 不可变, Stringbuffer 和 String Builder可变, 前者线程安全
讲讲JAVA8 的 ConcurrentHashMap
线程安全的HashMap
抽象类和接⼝的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么
类只能单继承,接口可以继承多个接口,类可以实现多个接口
继承和聚合的区别在哪
描述动态代理理的⼏种实现⽅方式,分别说出相应的优缺点
写出三种单例模式实现
error 和 exception 的区别, CheckedException, RuntimeException 的区别
错误和异常
编译时异常,和运行时异常
有没有可能 2 个不相等的对象有相同的 hashcode
可能,hash碰撞
Java 中的 HashSet 内部是如何⼯工作的
底层原理是HashMap
什么是序列化,怎么序列列化,为什么序列化,反序列化会遇到什么问题,如何解决
枚举类可以继承其他类吗?为什么
了解强引用,软引用,虚引用和幽灵引用吗?谈谈它们的⼀个使⽤场景
二:JVM知识
Jvm 包括那⼏大部分
什么情况下会发生栈内存溢出
JVM 的内存结构, Eden 和 Survivor ⽐例
JVM 内存为什么要分成新生代,⽼年代,持久代。新⽣代中为什么要分为 Eden 和Survivor
JVM 中一次完整的 GC 流程是怎样的,对象如何晋升到⽼年代
Jvm 什么情况下会回收⽅法区
你知道哪几种垃圾收集器,各⾃的优缺点,包括原理,流程,优缺点
详细介绍下 CMS 垃圾回收器
三: spring 和 mybatis
讲讲 Spring 事务的传播属性。
Spring 如何管理理事务的。
bean是单例的吗?为什么
mybatis #{} 和 ${} 区别,怎么实现分页
四:OS
⽤一行命令输出正在运行的 java 进程。
ps -ef | grep java
进程和线程的区别
多线程
多线程的⼏种实现⽅方式,什么是线程安全
volatile 的原理,作用,能代替锁么
不能
画一个线程的⽣生命周期状态图
sleep 和 wait 的区别
⽤过线程池吗,如果用过,请说明原理,并说说 newCache 和 newFixed 有什么区别,构造函数的各个参数的含义是什么,⽐如 coreSize, maxsize 等
CAS 机制是什么,如何解决 ABA 问题
网络:
TCP 三次握手和四次挥手的流程,为什什么断开连接要 4 次
TCP/IP 如何保证可靠性
Http 和 https 有什么区别
mysql:
Mysql MyIsam 和 InnoDB 引擎索引结构有什么区别
数据库隔离级别有哪些,各⾃的含义是什什么, MYSQL 默认的隔离级别是是什么
什么是幻读
MYSQL 有哪些存储引擎,各自优缺点
谈谈 explain 结果中⽐较关键的指标,以及指标的含义
redis:
Redis 的数据结构都有哪些,各⾃都适合什么样的场景
redis主从复制怎么完成的
redis有哪些优化的方式
算法题:
leetcode上的 3sum问题
二面主要聊项目
三面聊项目和软实力
一面 (基础技术面)
- redis的几种数据类型,redis是单线程的,如何优化? redis为什么能做到这么快 ?
- Spring的核心设计理念,SpringMVC的请求流程,MVC的分层在Spring中的实现
- ORM框架如何配置主从数据源,Mybatis原理
- 垃圾收集器用的哪种?CMS和G1的区别,讲一讲CMS垃圾收集的步骤,哪些步骤是并发哪些是并行。知道哪些垃圾收集算法
- 数据库索引了解多少?组合索引的最左原则,innodB和mylSAM的使用场景和区别,簇族索引和非簇族索引的存储区别
- sql优化怎么做,如何判断sql能否用到索引或者大约需要扫描多少行数据。
- HTTP1.0/1.1/2.0 HTTPS的区别与特性
- 讲讲NIO的原理与实现?NIO用到了哪个经典技术思想?JDK1.8中NIO有做什么优化
- SpringMVC、SpringBoot、SpringCloud之间的关系?SpringCoud的注册发现与RPC的实现。
- 知道哪些RPC的方式?有哪些框架?如果让你设计RPC数据交换报文格式你会怎么设计?最重要的是什么?
- 用过哪些日志框架、日志框架间的比较?
- Java中的锁有哪几种?Synchronized 的特性和底层实现?ReentrantLock了解么?AQS锁了解么?
- Java经典特性封装继承多态中的继承,Java的继承有什么缺点?wait()、notify必须在什么情况下使用
二面(经理面)
- 讲讲项目中的RocketMq服务化
- Java中的锁知道多少
- 有5000w数据的场景,如何做查询性能优化
- 线程、进程、协程的关系。
- 知道Go么,有没有学习过,排不排斥新语言的学习使用
- nginx的高可用,redis的高可用,redis的集群方案,一致性哈希和哈希槽模式下缓存服务器宕机,数据如何迁移
- 怎么让一个定时任务在集群模式下只有一个实例执行?怎么实现分布式锁?怎么高可用?怎么保证一定有且只有一个实例的定时任务成功
三面 (部门领导面)
- 讲讲项目中的高可用实现,知道zookeeper选举算法么?这个nacos如何实现的一致性,知道raft的原理么?选举的机制是什么样的?具体是怎么投票的?
- DNS原理,DNS的轮询规则是怎样的,一个DNS请求是怎样的,如何使用自己的DNS服务器
- 如果现在有一个活动,一共赠送用户100000点券,有一个获取点券的按钮,一个用户只能获取一次,获取的点券算法是一个函数do(s,l),s是用户的等级,L是目前剩余的点券。在这个业务场景下,最需要考虑的是什么(不是多线程竞争问题)
- 现在有一个游戏,玩家有一群建筑,这些建筑一开始是1级,然后点击升级按钮会扣除金币,同时建筑进入升级倒计时。如何设计这个建组等级相关的数据存储?如果有一个排行榜显示用户的建筑等级排行怎么办?如果用户升完级就退出,排行榜怎么保证排名的正确。用户下一次进来如何保证时间的准确性
- 在一个场景下:客户端使用TCP连接服务端通信。服务端如何检测出客户端断开连接?发送心跳是客户端发送好还是服务端发送好?如何在不用客户端/服务端发心跳包的情况下可以检测得到客户端tcp连接已经异常断开?
今日头条后端一面社招面经。内容比较偏计算机基础和项目,全程50分钟左右。问的问题大概包含以下几点:
1.自我介绍,挑一个你最熟悉的项目说一下?你这个项目最大的难点是什么?在项目中有没有遇到什么难题?你说你在项目中用到了一些设计模式,都讲讲你是怎么用的。项目中有分布式事务处理吗?有哪些常见的分布式事务处理方式?说一下你们在项目中怎么用的。
2.建立HTTP连接的三次握手的过程?,客户端和服务端分别是什么状态。讲一讲Http和Https的区别。
3.线程间通信的方式?假如现在在同一台机器上开两个java项目,有几个java虚拟机?产生死锁的四个必要条件还记得吗?聊聊linux吧,lsof这个命令用过吗?讲一讲linux系统的启动过程?
4.数据库事务的隔离级别有哪些?Mysql默认的隔离级别?不同的隔离级别是通过什么实现的?mysql的explain有用过吗?讲一讲数据库的慢查询?数据库的悲观和乐观锁都说一下吧,什么时候用乐观锁比较合适?什么时候用悲观锁呢?
5.你对tomcat有多少了解,nginx呢?把你知道的都说一下。有做过tomcat调优吗?
6.Java的内存模型,分为哪几块存储区,各个存储区域的作用?说一说volatile,一般什么时候用这个,给我举个例子呗。在项目中有用过ThreadLocal吗?为什么要用这个?ThreadLocal内存泄漏问题了解吗?要不你说下为什么会有这个现象?
7.如果web服务器突然出现频率很高的FullGC,可能是什么原因?你会怎么去排查呢?
8.讲一讲类加载器工作机制?你知道强引用、弱引用和软引用吗?为什么要有这些东西?他们有什么作用?你在项目中用过吗?
基础知识先问这么多,平时有刷题的习惯吗?要不咱写个题吧。
题目很基础leetcode110原题. 平衡二叉树。还是很幸运的。
给定一个二叉树,判断它是否是高度平衡的二叉树。题目描述如下:
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
时间也差不多了,今天就聊到这吧,你有什么想问的吗?问了下过去是不是要转go语言,面试官说是的,不过会给一段时间作为适应期。问了下我排斥转语言不?那当然是不排斥了。。。
昨天晚上曹操出行的笔试,不太简单也不太难,java基础考的多
就是那道算法题没想出来:两个有序数组求中位数,要求时间复杂度为对数级。后来看了网上的才懂
今天上午的现场面试:
1. 自我介绍 ...
2. 五层网络结构
3. (我简历上有写去一家公司实习了解过流媒体技术(其实啥也没学到)),面试官问我流媒体的协议,它们工作在哪一层,怎么保证数据的传输可靠
4. 路由器的作用是什么,工作在哪一层 , 交换机工作在哪一层
路由器工作在网络层,交换机工作在链路层
5. 我们从浏览器输入一个URL一直到连接到主机经历了哪些过程?
6. 然后就是java基础了,比较简单: C++和java的区别,抽象类和接口的区别 ,抽象方法等等...
7. 面试官问我主要用的jdk版本,我说1.8, 就问我1.8有哪些新特性?我就记得一个好像是hashmap底层改用红黑树了...
8. hashmap经典的结构,怎么解决哈希冲突,它是线程安全的吗,它何时扩容
9. java有没有多线程,synchronized 和 lock 的区别
10. (我简历有写学了ssm框架,其实只是用过),面试官问我spring有什么好处,为什么用它,它用了哪些设计模式。。我不太清楚...
11. 然后是数据库,一上来就问索引的结构,如何通过索引列找到非索引列的数据...
好像就这么多了,一直没问数据结构与算法...
加油吧!
计算机网络:TCP/IP细节以及HTTP(1.1和2.0)的各种特点一定要明白,UDP的使用场景,以及与TCP之间的区别(TCP是面向连接的稳定的数据流传输,UDP是非面向链接的不稳定的数据报传输这个应该可以帮助记忆)
操作系统:基本的操作需要熟知,以及一些比较高级的操作(crontab,ipcs,tcpdump等),进程线程之间的操作,死锁,网络IO模型,线程通信,进程通信,虚拟地址空间。目前没有很好的文章推荐,百度上可以多看看,操作系统的面试比较灵活
C++:首先就是STL中的vector(出现频率相当高),然后就是map,set(为什么用红黑树,什么是红黑树,为什么不用平衡树),智能指针,构造析构能否虚函数,怎么检查内存泄漏。
数据库:目前我遇到的都是Redis和Mysql的问题,Mysql中索引问的比较多,其次是各种日志,以及ACID特性,Redis的持久化方式,以及跳表怎么实现,同样需要自己扩充。
项目方面:我做了几个小项目,有需要的同学可以参考,具体的注释我全部都写了,如果有问题可以
,大佬可以自行忽略(狗头保命)
(顺便厚颜无耻的求star和follow,如果可以的话推荐自己实现一下,一下项目感觉可以在面试中吹一下)
- 线程池的实现,使用c++11完成,可以帮助同学们理解线程池,实现比较简单可以参考
- Web服务器的实现,目前还没有上传测试结果,准备使用locust进行测试,目前代码和注释已经完成
- 短网址服务,百度的面试题,使用Redis和go语言完成,同学们可参考
面试最后一般会有一个场景题,如果有场景题的话我感觉这个面试是很稳了,场景题一般是入职之后第一个要写的东西,请尽力所答,不要放弃,加油!
以下是面试中遇到的一些问题:
c++:
- vector的底层实现
- map和set的底层数据结构是什么,为什么使用红黑树(腾讯,头条),给我讲一下红黑树的性质(头条)
- 空类的大小(腾讯),线程池写过吗,讲一讲(腾讯)
- 内核态和用户态之间怎么转换的(头条)
- 构造函数可以使用virtual修饰吗(头条)
go: - go的协程怎么实现的与c++的区别(小米)
- 顺序定义defer最后怎么执行
- 讲一下你用go实现的项目
数据库: - 各种索引的理解(头条,小米,腾讯)
- 各种日志的理解(头条,小米)
- 怎么看哪一个查询是慢查询(头条)
- Redis的跳表(头条)
- Redis的持久化(小米,头条)
- Redis和Memcache的区别(小米,腾讯)
操作系统: - 各种奇怪的命令(阿里(文本三剑客),小米(各种常规操作),腾讯(crontab,ipcs))
- IPC方法(谁都问,大家都知道)
- 进程与线程的区别(谁都问,大家都知道)
- Epoll和poll以及select的区别(设计IO模型,腾讯)
- Linux中的网络IO(小米,腾讯)
计算机网络: - TCP三次握手和四次挥手的各种状态(谁都问)
- 四次挥手中的TIME_WAIT状态存在的意义(小米,腾讯)
- TCP为什么可靠(腾讯,小米,头条)
- 滑动窗口是什么(腾讯,小米,头条)
- HTTP和HTTPS的区别(一般都会问感觉)
算法题:
变化多端,头条喜欢动态规划和强思维(leetcode中等偏上),腾讯重思路,小米同样看重思路
头条:
- 最大1矩阵(dp)
腾讯:
- 我现在有两个玻璃球,已知玻璃球在某 一个高度扔下去会摔碎,请用这两个球测试那个临界楼层,尽可能少的测试。
小米:
- 二分
1、出身:纯正非科班
2、面试公司:同城艺龙、招商、海康威视、高德、百度、美团、新浪、迅雷、欢聚时代、去哪儿网、zoom、科大讯飞、当当、vivo等。。。
3、投递岗位:C++方向。。。。
4、c++复习书籍:C++ primer、STL源码剖析、深度探索C++对象模型、Effective C++、设计模式、王道等。。。
5、数据结构书籍:数据结构教程、数据结构与算法分析、算法导论。。。
6、数据结构知识点:
1>链表:链表的反转、回文链表、链表相交、有环无环链表等。。。
2>栈队列:最小栈、栈实现队列、队列实现栈等。。。
3>字符串:BF、KMP匹配。。。
4>树:二叉树的性质、二叉树的递归非递归遍历以及层次遍历、二叉树的构造、二叉树的深度、二叉树的路径、镜像二叉树、搜索二叉树、平衡二叉树、并查集、B树、B+树等。。。
5>图:图的广度优先搜索、深度优先搜索、生成树和最小生成树、最短路径、拓扑排序等。。。
6>查找:线性表查找、树表查找、哈希表查找。。。
7>排序:八大排序算法,其中归排、堆排、快排问的最多。。。
7、计算机网络书籍:计算机网络自顶向下、TCP/IP卷一、协议森林。。。
8、计算机网路知识点
1>数据链路层:ARP地址解析、循环冗余检测。。。
2>网络层:子网划分和子网掩码、CIDR、ICMP网际控制协议、DCHP协议工作流程等。。。
3>传输层:TCP与UDP的区别以及应用范围、TCP三次握手四次挥手、TIME_WAIT原因、TCP可靠传输(累计确认、超时重传、选择重传、滑动窗口、拥塞控制、慢开始、拥塞避免、快重传、快恢复)、TCP/ UDP头部等。。。
4>应用层:Http报文格式、Get/post区别、http与https区别、DNS域名解析流程等。。。
9、操作系统知识点:
1>进程管理:进程、线程、进程通信与进程同步、调度算法、死锁等。。。
2>内存管理:逻辑地址空间与物理地址空间、内存分配管理方式、虚拟内存管理等。。。
10、数据库:SQL语句、事务、索引、视图、锁。(数据库玩的比较少)
11、Linux:Linux常用命令、shell、gdb断点调试。(Liunx玩的比较少)
12、算法:剑指offer(至少两遍)、牛客网、LeetCode中国、算法(动态规划、贪心、回溯、分治)等。。。
13、逻辑推理:乒乓球称重、老鼠喝水、海盗分金币、城市有多少出租车、多少理发店等。。。
14、海量数据处理:Top N问题,公共数据问题,内存Top N问题等。。。