美团一面不出意外的凉…面试题也都紧张的快忘了
上来一道笔试题,也不难。
第一次这么面试,敲代码的时候手都在抖…
一直空指针异常…还是太紧张了,不是很难的题,还是自己傻了…哭了
面试题记得也不太清了
- Linux中硬链接和软链接的区别
硬链接有着相同的inode和data block,仅仅是文件名不同,本质上就是同一个文件;而软连接的inode不同,保存了其代表文件的绝对路径,是另一种文件,它就像windows里的快捷方式,在硬盘上有自己的区块,访问时替换自身路径
硬链接只能对已存在的文件创建,不可交叉文件系统;软连接可对不存在的文件或目录创建,可交叉文件系统
删除源文件并不影响硬链接访问,但软链接无法访问,重新创建后可以再访问
- 排序算法的稳定性是什么,有哪些是稳定的,哪些是不稳定的
排序算法稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序这些记录的相对次序保持不变,即在原序列中ri=rj且ri在rj之前,而排序后ri仍在rj之前,则称该排序算法稳定,否则不稳定。
(通俗来讲保证排序前两个相等元素的a在前b在后,排序后还是a在前b在后)
稳定排序算法:基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序
不稳定排序算法:堆排序、快速排序、希尔排序、直接选择排序
- 快速排序的复杂度是什么,他的复杂度会根据情况改变吗,最大是多少,什么情况下最大。
复杂度:平均O(nlogn)
复杂度会根据数据情况改变
理想情况:每次划分前选择的中间元素恰好能将整个序列几乎等分,复杂度为O(nlogn)
最坏情况:每次选择的中间元素是当前序列的最大或最小元素,这使得每次划分出的两个子序列一个为空一个为n-1,这样长度为n的序列要经过n次划分,复杂度为O(n2)
为改善最坏情况,可用“三者值取中”的方法:比较r[low].key、r[high].key、r[(low+high)/2].key,取三者中关键字为中值的元素为中间数
- 什么排序算法是O(n)的
桶排序、基数排序、计数排序
- Hashmap的底层是怎么实现的
1.7是数组+链表;1.8是数组+链表+红黑树
- HTTP在OSI中是哪一层的,HTTP是有状态的吗,有什么状态
我说有状态,面试官就问有什么状态…问了状态是不是404什么的,面试官说不是…(自己给自己挖坑了…)
应用层,超文本传输协议,从web服务器传送超文本到本地浏览器
HTTP是一种无状态无连接协议,即客户端和服务端的每个连接都是独立的,它的执行结构与前面和后面的请求无关,服务器中不保存客户端的任何状态。而状态码是表示一次请求中的服务器响应状态。
为了存储状态,我们可以用cookie和session来存储(引出cookie和session的区别)
- Java的类加载器
四种类加载器
启动类加载器bootstrap classloader:负责加载Java核心类库lib下的jar包
扩展类加载器Extension classloader:负责加载lib/ext下的jar包
系统类加载器System classloader:面向用户的加载器,主要加载java.class.path下的类与jar包,是最常用的加载器,用户自定义的类都是它加载
自定义加载器:自己实现的加载器
(后面就可能说到类加载过程和双亲委派机制)
- Spring…
- 设计模式知道吗,说下单例模式,lazy是怎么保证线程安全的(不知道),让我自己想一个方法来帮助实现if判空造成的线程不安全(说了信号量…),用Java想一下怎么写。
单例模式:只需要一个某个类的对象,就可以用单例,把自己写成自己的静态私有成员变量,然后通过一个方法返回这个变量给别的类用,分为饿汉式和懒汉式,懒汉式有线程不安全问题,可能两个线程进去if创建了两次对象
lazy的话可用synchronized修饰getInstance方法,缺点是效率低,每次调用都要等
lazy可用双检锁改善,if null -> synchronized -> if null,第一个if正常判空,synchronized实现进入if的多个线程排队,第二个if帮助多个线程进入同步下的判断
- 事务了解吗(说了ACID),隔离等级,幻读
事务的四种特性
原子性:一个事务的执行要么成功要么失败
一致性:事务必须使数据库从一个一致性状态转换到另一个一致性状态
隔离性:事务之间相互隔离,互不干涉,不能在执行完成前调用另一个事务的数据
持久性:事务提交后对其改变是不可逆的,后面产生异常也不会影响
隔离级别
读未提交:一个事务读取了另一个事务未提交的数据
读提交:一个事务提交后才能让另一个事务读取
可重复读:在事务开始读取数据时,其他事务不能修改
序列化:事务串行执行,但是效率低下消耗数据库性能,一般不用
并发操作中的问题
脏读:A事务读取了B事务未提交的数据,提升至读提交
不可重复读:A事务正在多次读取数据,此时B事务对数据进行更新并提交,导致A事务两次读取的数据不一致,提升至可重复读
幻读:一个事务在前后两次查询同一范围时,后一次查到了前一次没有看到的行,提升至序列化
- 写的时候用过两张表的情况吗,左连接右连接内连接
左外连接(LEFT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括左表的所有行,没有匹配的用null表示
右外连接(RIGHT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括右表的所有行
完全外连接(FULL OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括两个表的所有行
内连接按照ON所指定的连接条件合并两个表,返回满足条件的行
- 开放性问题,问我最近读什么技术类书籍(在读面试书籍),对什么技术感兴趣(我说对负载均衡、高并发…我为什么要说),自己想一个算法来解决一下服务器压力的问题…
现在知道了一些策略,轮询、权重(又分好几种)、IP哈希等
- 还有好多记不清了…问的几乎都还没复习到…
反问:
如果我想进美团,要掌握什么技术,到什么程度
语言基础、计算机知识基础
如果会用工具、框架的话,要懂工具底层,不能只是会用会增删改查
如果在这些基础上能懂高并发、负载均衡、分布式等等,是加分项
然后我就结束了…记第一次大厂面试凉经…又紧张又不会,问了好多还没看到的,后面心里就想快点结束吧请不要再羞辱我了。
大厂问的虽然也是基础知识,但是又是基础中要求比较高的,唉想去大厂还有很长的路要走。各位小伙伴也请给点评论啊。
后面把答案大都补上了,大家觉得有问题可以评论区留言,请一定!