美团SaaS事业部实习一面凉经
问题:
1、LinkedList和ArrayList存储了一定数据,循环了上亿次,谁执行的速度快,为什么
2、如果两种数据类型存储了1到100的数据,每次遍历到50个数字之后就将之前遍历的拼接最后面,谁快,为什么(好像是,具体问的什么有点遗忘了)
3、创建一块新的内存一定比指针重新指向慢吗,为什么
4、synchronized和reentrantlock区别
5、synchronized原理,它是如何锁住临界资源的
6、reentrantlock原理,阻塞队列是如何锁住线程的
7、线程池参数,作用
8、核心线程数5个,阻塞队列长度7,最大线程数10,20个任务,一个任务执行1分钟。是否会触发拒绝策略?会执行多久?
9、如果我想在一分钟完成所用任务,该如何设计线程池
10、mysql事务的四大特性
11、事物的隔离性是如何实现的
12、MVCC
13、如果在读已提交的事物隔离级别下,是否会用到MVCC,为什么
14、mysql中有一个表有(A,B,C,D)字段,select A,B from 表 where C=? and D=?,如何让这段SQL执行速度达到最快?
15、如果是查C,D。查询条件是A,B呢,索引该如何设计。如果不知道这四个字段查询的数据和查询的条件该如何设计
16、redis的过期删除策略
17、定期删除时,redis是如何扫描内存的
18、利用hash表存储数据,既想通过key查询value,又想获取最大值或者最小值或者中间某个年龄(场景是key:name,vlue:年龄),使它的存储有顺序,该如何设计
19、优先级队列的数据结构,优先级队列一定是通过数组实现的吗
20、讲一讲git的命令
21、一个分支上面提交了1,2,3,如何得到1,3而跳过2
22、避免重复下单的几种解决方案
23、如果用户没有一个唯一标识或者说用户不需要登陆就能下单,该如何避免重复下单
24、前端一次性传入很大的excel该如何处理
25、在大文件进入到内存之前如何避免一次性传入过大的文件
26、算法:对称二叉树
(大概是这些,有些可能忘了)
1、LinkedList和ArrayList存储了一定数据,循环了上亿次,谁执行的速度快,为什么
2、如果两种数据类型存储了1到100的数据,每次遍历到50个数字之后就将之前遍历的拼接最后面,谁快,为什么(好像是,具体问的什么有点遗忘了)
3、创建一块新的内存一定比指针重新指向慢吗,为什么
4、synchronized和reentrantlock区别
5、synchronized原理,它是如何锁住临界资源的
6、reentrantlock原理,阻塞队列是如何锁住线程的
7、线程池参数,作用
8、核心线程数5个,阻塞队列长度7,最大线程数10,20个任务,一个任务执行1分钟。是否会触发拒绝策略?会执行多久?
9、如果我想在一分钟完成所用任务,该如何设计线程池
10、mysql事务的四大特性
11、事物的隔离性是如何实现的
12、MVCC
13、如果在读已提交的事物隔离级别下,是否会用到MVCC,为什么
14、mysql中有一个表有(A,B,C,D)字段,select A,B from 表 where C=? and D=?,如何让这段SQL执行速度达到最快?
15、如果是查C,D。查询条件是A,B呢,索引该如何设计。如果不知道这四个字段查询的数据和查询的条件该如何设计
16、redis的过期删除策略
17、定期删除时,redis是如何扫描内存的
18、利用hash表存储数据,既想通过key查询value,又想获取最大值或者最小值或者中间某个年龄(场景是key:name,vlue:年龄),使它的存储有顺序,该如何设计
19、优先级队列的数据结构,优先级队列一定是通过数组实现的吗
20、讲一讲git的命令
21、一个分支上面提交了1,2,3,如何得到1,3而跳过2
22、避免重复下单的几种解决方案
23、如果用户没有一个唯一标识或者说用户不需要登陆就能下单,该如何避免重复下单
24、前端一次性传入很大的excel该如何处理
25、在大文件进入到内存之前如何避免一次性传入过大的文件
26、算法:对称二叉树
(大概是这些,有些可能忘了)
全部评论
首先在来接syn锁之前,需要了解我们java中对象头的结构,对象头中包含objectheader,class work以及我们的markword,markword主要从初hashcode 分代年龄等信息,首先对于原始的syn锁,我们也叫他重量级锁,在对对象加锁的过程中,会调用native方法跟操作系统申请一个监视器对象,然后将二者关联起来,在关联的过程中,会讲对象头中的markword交给monitor管理,然后markword存储对应monitor的地址,方便我们后续加锁的时候寻址,syn锁是基于monitor实现的,他里面包含owner来存储thread对象,为null则表示当前没有线程获取锁,不为null则表示已经有人获取锁了,会进入到entryset中排队等待,当然如果获取锁的线程由于一些i蛀牙UN没有准备好,进入wait,会释放锁然后进入到waitset中等待,当其他持有锁的线程进行notify后会将waitset中线程放入到entryset中等待,这个set是无序集合,所以不确定哪个线程被调度后持所锁,所以syn是非公平锁,由于加锁每次都需要跟操作系统申请monitor,这个操作sh比较重的,所以jvm底层做了很多优化,比如:重量级锁的自旋,没获取到锁在重试几次,减少线程从运行变更为阻塞状态的上下文切换,还有就是轻量级锁,使用场景是不存咋锁竞争的情况,他会在当前thread staack中创建一个lock record记录,然后将lock record 和 对象头中的markword进行 cas交换,如果当前线程发生了锁重入,发现markword里面存的lockrecrd是当前线程会将所重入的lock 记录 方null,用来记录所重入的次数,释放锁则移除一个lock rerecord,后续如果发生锁竞争,还是会走cas操作尝试交换信息,结果发现已经被交换完了,说明发生了锁竞争就会走锁锁膨胀逻辑,变成重量级锁,然后本身持有轻量级锁的线程会走重量级锁的释放锁的流程.......当然如果不存在锁竞争的情况下,频繁发生自旋,每次都要cas操作,效率也比较低,底层做了优化,干脆直接把线程id刻到markword里面,这也就是偏向锁.......
3这种问题怎么回答啊,还有21这种问题也不会,有git进阶的资料推荐吗
mysql事务的四大特性
11、事物的隔离性是如何实现的
12、MVCC
13、如果在读已提交的事物隔离级别下,是否会用到MVCC,为什么
事务的四大特性ACID 原子性一致性隔离性持久性 首先原子性主要指一个事务内所有操作要么全都执行全都全都回滚,底层是通过undolog版本链来实现的,持久性主要是指在事务提交回滚的时候对数据修改是永久的,主要是通过redolog来实现的,主要是用在脏页刷盘到磁盘的时候,如果出现故障,可以使用redolog来进行数据恢复,一致性是通过redolog和undolog来共同保证的,隔离性主要是指事务的隔离性,对于并发事务来说有三种情况 读读 这种并发事务不会出现问题 读写 一个事务写 另外一个事务在写之前读和写之后读就会出现问题,比如:脏读幻读不可重复读以及事务同时写隔离性的问题,还有就是写写可能会出现数据丢失,nysql的隔离性是通过mvcc+锁来共同实现的,mvcc也叫作多版本并发事务,主要是用来实现并发事务的非阻塞读的功能的,通过这种方式可以大大提高我们并发事务读写的性能,里面有两个核心一个是快照读当前读以及我们的隐藏字段事务id回滚指针 undolog版本链,所谓当前读就是使用加锁的机制,来读取到最新的数据,因为他加锁了索引性能不是很高,比如select for update update等,第二种是快照读,会根据undolog版本链相关规则进行匹配生成一个数据的快照,从而实现并发读,在不同隔离级别下实现方式不同,比如rc隔离级别,每次select都会生成一个新的快照,如果中间有事务更改数据并叫了,第二次select就会导致不可重复读的问题,在rr隔离级别下,只有第一次读的时候会生成快照,以后就复用,就实现了可重复读的功能,对应快照具体的匹配规则就是 如果当前查询的事务id=数据影藏字段中的trxid说明是当前事务修改了数据,可以读到,如果不是则会沿着版本链继续向下进行判断,比如:事务id是否小于最小活跃事务id,说明已经提交了,事务id是否》最大活跃事务id说明快照是在事务开启前创建的,如果事务id在最小活跃事务id和最大活跃事务id之间,并且对应事务id不在存活事务id中,可以访问这个事务已经提交了可以访问,通过这个匹配规则就解决了 脏读的问题
啥叫循环了上亿次啊?查询了上亿次?
m
如果用户没有一个唯一标识或者说用户不需要登陆就能下单,该如何避免重复下单
按钮灰度+用token机制可以,有用户恶意下单不付钱怎么办???限流 (一个人可能在一s内创建多个订单吗?) 提前提醒他,下单不付钱,会被禁止一段时间下单(风控)
前端一次性传入很大的excel该如何处理
这个看具体的场景,如果就管上传存储,那就无所谓了,直接走oss直传,然后用分片上传机制
如果是上传的excel是导入数据场景就麻烦了,一方面,直接在业务侧,禁止用户上传excel,直接让用户自己改成csv文件,直接降低excel文件大小的一个量级,然后线程每个文件的大小上限,提供工具给用户对文件切片,保证一次上传一次数据的时间不会很长,服务端要提供一个接受文件的程序,直接通过0拷贝到本地指定位置,然后把导入记录成任务发送到mq,慢慢处理(懒得打了,企业方案(导入导出中心,直接把文件搞到本地存储,然后根据机器资源分配任务,超额任务到MQ排队)
面了多久
感觉难度不是很大,答了多少?
是暑期吗
完了,好像好多不会
挺基础。
这是日常实习吗
redis的过期删除策略
17、定期删除时,redis是如何扫描内存的
首先当我们给redis中存储的数据设置了过期时间,并且当数据过期了,此时他并不会立刻去讲数据删除
他的删除策略有两种,一种是惰性删除,当下次我们访问这个key的时候,发现他key已经过期了就去删除他
第二种是扫描,扫描哪些key过期了就删除
第一种方案的优先就是不占用redis的cpu去扫描哪些过期了,缺点就是可能会存在大量的过期key,占用redis的内存,导致redis内存飙升甚至告警,当然这个问题我们是可以利用redis数据淘汰策略,比如allkeys-lru来进行一个兜底,保证不会出现内存不足报错的情况
第二种扫描最大的问题是怎么扫,如果我们存在的数据特别多,一次性扫描一堆的数据,会阻塞主线程,效率非常低
所以一般来说采用的是每隔一段时间,就随机咯一些key过来判断他有没有过期,
这样结合上面两种方式我们就能够男足大多数情况了
第8个是几分钟????
第一第二点怎么答的呢大佬
dr的吗
焯,我春招投成了这个不知道还有没有面的必要
项目问了多久,这八股问的也太多了吧
感觉有70%会,剩下的没看过或者记不清
相关推荐
zachsun:华科硕士给13级?有点逆天了吧
点赞 评论 收藏
分享
mmvvcc:没通过你就偷着乐吧,这样的进去你天天受气
点赞 评论 收藏
分享