本文共 2763 字,大约阅读时间需要 9 分钟。
从7月底开始,到10月中旬获得offer
进入面试流程的包括字节跳动、招银科技、百度、Keep、华为、花旗、京东、有赞、去哪儿、拼多多、okcoin,收到的offer有华为、招银、有赞、去哪儿,其他有一面凉、二面凉以及HR面凉等等。
面试中遇到的问题整理如下,仅供参考
计算机网络
- TCP、UDP在哪一层?它们之间有什么差别,哪一个传输效率更高,为什么?分别用于什么场景?
- HTTP和HTTPS的差别,在哪一层?HTTPS怎么保证安全,服务器怎么把证书给客户端?
- 计算机网络五层结构每层做什么,分别介绍一下
- IPV4和IPV6区别
- 网络层数据包的头部有哪些
- TCP中的timewait
- TCP三次握手,四次挥手流程,其中的状态
- TCP过期时间
- TCP头部有哪些
- IP报文头部信息
- HTTPS的证书在哪里下载
- 在浏览器中输入www.xxx.com的过程
- POST和GET的区别
- HTTP状态码500的含义,其他状态码了解么
- HTTP怎么创建长连接
- TCP read函数
- 怎么创建进程
- TCP包大小
- UDP,1兆大小的数据可以直接传输么
- IP包大小
- HTTP1.1和HTTP2的特点
- TCP怎么保持可靠的
操作系统
- 进程和线程的差别
- 线程可以用到进程的哪些资源
- 进程的哪些资源可以被线程共享
- 操作系统会分配给进程哪些资源
- 死锁产生的原因,怎么预防
- 进程的几个状态
- Linux中进程间通信的机制,更详细说明一下
- 操作系统用于解决什么问题
数据库
- 聚簇索引和非聚簇索引
- MySQL的索引原理
- B+树和B树的区别
- B树在什么场景下用
- 内连接和外连接的区别
- 数据库建立索引在哪些字段建立
- 事务的基本特性,详细解释一下
- 介绍一下索引,索引的优点缺点,为什么加了索引之后新增、更新、删除会变慢?如果更新非索引字段,速度会受到影响么?
- MySQL主从复制怎么做的
Java基础
- HashMap和HashTable的区别
- HashMap是怎么实现的
- HashTable底层是怎么实现线程安全的
- Java中的类型转换,什么情况显示转换,什么情况隐式转换
- 泛型的好处
- 创建线程的几种方式,常用哪种
- 线程的几个状态,什么情况下会到那些状态
- run()和start()的区别
- sleep()和wait()的区别
- 垃圾回收的机制,优缺点分析
- Java中的基本类型和引用类型,基本类型和引用类型在内存分配中的区别
- ==和equals()的区别
- StringBuilder和StringBuffer的区别
- Synchronized和Lock那个快
- Java基本类型,基本数据结构
- String和StringBuilder
- Session和Cookie的区别
- 多线程访问会产生的问题
- 乐观锁和悲观锁的实现机制
- Java的GC机制,停止复制算法用在什么场景下
- Java中的闭包什么意思
- 怎么把byte转string
- 怎么加锁
- volatile关键字解释一下
- int转byte详细说明
- 跨平台怎么转
- 原子性操作
- 32为虚拟机和64位虚拟机中int的范围有什么不同
- 两个对象不同,有没有可能有相同的hashcode,两个对象相同,会不会有不同的hashcode
- a=a+b和a+=b的区别
- i++会不会有线程安全问题
- int+float最后什么类型
- 3*0.1==0.3成立么,为什么
- public、protected和private的区别
- Java中有哪些异常类型
- final 修饰方法的含义
- try catch return finally的执行顺序
- Set中的内容可以重复么
- 怎么跳出while循环
- Java的类加载器
- 类加载器加载一个类的过程有哪些
- 新建一个对象时怎么分配内存
- HashMap为什么在数据较多时用红黑树而不是链表
- 快排和堆排序,什么情况下用快排,数组比较有序的情况下用什么排序
- 程序运行慢,怎么排查
- 红黑树的特点
- 数组和链表的区别,删除数组的最后一位和删除链表的最后一位哪个更快,为什么?
- Synchronized是怎么实现的
- 饿汉单例模式是线程安全的么,怎么实现的
- HashMap的key要求,类可以作为key么
- Java怎么存储小数点后1000位的小数
- 怎么实现缓存,应该使用什么数据结构
- 为什么有自旋锁
- 线程越多越好么,为什么
- IO多路复用
- HashMap内部某个位置节点数目多了为什么用红黑树,为什么不用二叉搜索树
Python
- 生成器和迭代器
- Python的进程、线程、协程
Redis
- MySQL和redis的区别
- Redis的持久化
- RDB怎么不影响主进程的
- Redis和MongoDB的区别
- 了解Redis的存储机制么
软件工程
- 软件工程的几个阶段
- 面向对象特征,分别解释,重点是多态性
- 接口和类的区别
- 构造方法和一般方法的区别
手写代码
- 两个链表求交叉节点
- 给定长度为n的数组,给定k,求出其中出现次数大于n/k的
- 手写两个线程,一个发送消息,一个接收消息
- 给定字符串,找出第一个只出现一次的字符
- 手写单例模式
- 传入一个数组,把数组中的元素转为单链表
- 反转单链表
- 传入一个数组,如果一个元素为0,则对应行和列都置位0
- 最大连续子数组和
- 找出出现次数大于数组长度一半的数字
- m行n列,从左上角到右下角有多少种走法
- 求两个字符串的最长公共子字符串
- 冒泡排序以及斐波那契的递归版本
- 快排
- 实现一个栈,有push和pop方法,还有可以获取最小值O(1)
-
两个字符串a 和 b ,判断下b 是不是 a 打乱顺序后的结果。比如 a 是 113 ,b是 311 ,那么b是a打乱后的结果。写个方法,参数是2个字符串,如果满足条件返回ture,否则返回false
手写SQL语句:
-
表 名: t ,字段 :姓名 课程 分数 。写sql 语句,找出平均分大于80分的课程。
场景
- 分布式数据库,需要从多个数据库读取数据并整合,怎么实现
- 100G的一个文件,每一行都是Long类型的数据,然后系统内存1G,怎么进行排序,需要多少次IO操作,怎么可以减少IO操作次数
其他
- js和C#、Java这些语言的区别
- C#和Java的区别
- C#、Java和C、C++的区别
- C# 和Java中的值传递和引用传递的区别
- C# 索引器
- C#委托
- 怎么保存用户状态
- c#中的垃圾回收和java的垃圾回收
- 前端怎么跨域
- 前端行缩进怎么做,怎么获取另一个函数中的局部变量,闭包用于那些情况
- 快排最坏情况复杂度
- 堆排序 调整堆的复杂度
- HTML5了解哪些
- JQuery中的Ajax内部怎么实现的
- Ajax跨域怎么做
- 讲一下线性回归
- CNN是用于做什么的
- 你看了哪些书
- 深度学习了解哪些,跟上面那个问题相关
Linux这块也需要了解,但是我自己了解的比较少,emmmmm
转载地址:http://cryai.baihongyu.com/