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问题
二面主要聊项目
三面聊项目和软实力
一面 (基础技术面)
二面(经理面)
三面 (部门领导面)
今日头条后端一面社招面经。内容比较偏计算机基础和项目,全程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++:
算法题:
变化多端,头条喜欢动态规划和强思维(leetcode中等偏上),腾讯重思路,小米同样看重思路
头条:
腾讯:
小米:
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问题等。。。