首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
mkbk111
西安电子科技大学 Java
发布于陕西
关注
已关注
取消关注
@白色风车2019:
【阿里巴巴】面经分享
自我介绍1.SpringBoot的优点1.创建独立的Spring应用程序。SpringBoot可以jar包的形式进行独立的运行,使用:java -jar xx.jar就可以成功运行项目,或者在项目的主程序中运行main函数。2.springboot项目不需要单独下载Tomcat等传统服务器,内嵌容器,使得我们可以执行运行项目的主程序main函数,并让项目的快速运行,另外,也降低对运行环境的基本要求,环境变量中有JDK即可。3.Spring Boot提供了一系列的starter pom用来简化我们的Maven依赖,通过这些starter项目就能以Java Application的形式运行Spring Boot项目,而无需其他服务器配置。4.Spring Boot提供Spring框架的最大自动化配置,大量使用自动配置,使得开发者对Spring的配置尽量减少。Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置。https://www.cnblogs.com/echola/p/10996214.html2.ThreadLocal原理,应用场景ThreadLocal主要用来存储当前线程上下文的变量信息,它可以保障存储进去的数据,只能被当前线程读取到,并且线程之间不会相互影响。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLocal有哪些典型的应用场景:1.数据库事务。通过AOP的方式,对执行数据库事务的函数进行拦截。函数开始前,获取connection开启事务并存储在ThreadLocal中,任何用到connection的地方,从ThreadLocal中获取,函数执行完毕后,提交事务释放connection。2.web项目中,用户的登录信息通常保存在session中。做一个拦截器,把用户信息放在ThreadLocal中,在任何用到用户信息的时候,只需要从TreadLocal中读取就可以了。ThreadLocal 内部维护了一个ThreadLocalMap 的静态内部类。ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,弱引用的特点是,如果这个对象只存在弱引用,那么在下一次垃圾回收的时候必然会被清理掉。3.AtmoicInteger的原理,CAS原理cas:将指定内存地址的内容与所给的某个值相比,如果相等,则将其内容替换为指令中提供的新值,如果不相等,则更新失败。AtomicInteger的本质:自旋锁+CAS原子操作。AtomicInteger中用的就是Unsafe的CAS操作。4.ReentrantLock,synchronized的区别1.Synchronize是基于jvm的,ReentrantLok是基于JDK的。2.ReentrantLock多了几条特性。等待锁的线程可终止,可实现公平。3.ReentrantLock可实现选择性通知。synchronized中wait notify,notifyAll时是唤醒所有wait的线程。 而ReentrantLock中Condition可创建多个,siginalAll时唤醒的是那个Condition实例wait的所有线程。5.ConcurrentHashmap的底层数据结构,put操作ConcurrentHashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树是为了提高查找效率。说明:put函数底层调用了putVal进行数据的插入,对于putVal函数的流程大体如下。 ① 判断存储的key、value是否为空,若为空,则抛出异常,否则,进入步骤② ② 计算key的hash值,随后进入无限循环,该无限循环可以确保成功插入数据,若table表为空或者长度为0,则初始化table表,否则,进入步骤 ③ 根据key的hash值取出table表中的结点元素,若取出的结点为空(该桶为空),则使用CAS将key、value、hash值生成的结点放入桶中。否则,进入步骤 ④ 若该结点的的hash值为MOVED,则对该桶中的结点进行转移,否则,进入步骤⑤ 对桶中的第一个结点(即table表中的结点)进行加锁,对该桶进行遍历,桶中的结点的hash值与key值与给定的hash值和key值相等,则根据标识选择是否进行更新操作(用给定的value值替换该结点的value值),若遍历完桶仍没有找到hash值与key值和指定的hash值与key值相等的结点,则直接新生一个结点并赋值为之前最后一个结点的下一个结点。进入步骤⑥ 若binCount值达到红黑树转化的阈值,则将桶中的结构转化为红黑树存储,最后,增加binCount的值。将ConcurrentHashMap容器的数据分段存储,每一段数据分配一个Segment(锁),当线程占用其中一个Segment时,其他线程可正常访问其他段数据。6.final 和 finally的区别1.当用final修饰类的时,表明该类不能被其他类所继承。2.final修饰方法,把方法锁定,以防止继承类对其进行更改。3.final成员变量表示常量,只能被赋值一次,赋值后其值不再改变。当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。7.JVM GC,什么时候执行minorGC,fullGCMinor GC触发条件:当Eden区满时,触发Minor GC。Full GC触发条件:(1)调用System.gc时,系统建议执行Full GC,但是不必然执行(2)老年代空间不足如果创建一个大对象,Eden区域当中放不下这个大对象,会直接保存在老年代当中,如果老年代空间也不足,就会触发Full GC。为了避免这种情况,最好就是不要创建太大的对象。(3)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小。8.CMS的过程,优缺点,使用场景1.初始标记(CMS initial mark)只是标记一下GC Roots能够直接关联的对象,速度很快,仍然需要暂停所有的工作线程。2.并发标记(CMS concurrent mark)和用户线程一起。进行GC Roots跟踪过程,和用户线程一起工作,不需要暂停工作线程。主要标记过程,标记全部对象3.重新标记(CMS remark)。为了修正并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,仍然需要暂停所有的工作线程。4.并发清除(CMS concurrent sweep)和用户线程一起。清除GC Roots不可达对象,和用户线程一起工作,不需要暂停工作线程。基于标记结果,直接清理对象由于耗时最长的并发标记和并发清除过程中,垃圾收集线程可以和用户现在一起并发工作,所以总体上看来CMS收集器的内存回收和用户线程是一起并发的执行。优点:并发收集停顿低。缺点:并发执行,cpu资源压力大。由于并发进行,CMS在收集与应用线程会同时增加对堆内存的占用,也就是说,CMS必须要在老年代堆内存用尽之前完成垃圾回收,否则CMS回收失败时,将出发担保机制,串行老年代收集器将会以STW的方式进行一次GC,从而造成较大停顿时间。采用的标记清除算***导致大量的碎片。标记清除算法无法整理空间碎片,老年代空间会随着应用时长被逐步耗尽,最后将不得不通过担保机制堆堆内存进行压缩。9.AOP是什么,实现原理面向切面编程。AOP技术利用一种称为“横切”的技术,解剖封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,这样就能减少系统的重复代码。常用在权限认证、日志、事务处理。实现原理是动态代理。InvocationHandler。Itask taskProxy= (Itask) Proxy.newProxyInstance(Itask.class.getClassLoader(),new Class[]{Itask.class},invocationHandler);10.索引,数据库锁聚集索引就是以主键创建的索引。非聚集索引就是以非主键创建的索引。聚集索引在叶子节点存储的是表中的数据。非聚集索引在叶子节点存储的是主键和索引列。使用非聚集索引查询出数据时,拿到叶子上的主键再去查到想要查找的数据。1,最左前缀匹配原则。,MySQL会一直向右匹配直到遇到范围查询(>,<,BETWEEN,LIKE)就停止匹配。3,尽量选择区分度高的列作为索引,区分度的公式是 COUNT(DISTINCT col) / COUNT(*)。表示字段不重复的比率,比率越大我们扫描的记录数就越少。4,索引列不能参与计算,尽量保持列“干净”。比如,FROM_UNIXTIME(create_time) = '2016-06-06' 就不能使用索引,原因很简单,B+树中存储的都是数据表中的字段值,但是进行检索时,需要把所有元素都应用函数才能比较,显然这样的代价太大。所以语句要写成 : create_time = UNIX_TIMESTAMP('2016-06-06')。5,尽可能的扩展索引,不要新建立索引。比如表中已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。6,单个多列组合索引和多个单列索引的检索查询效果不同,因为在执行SQL时,MySQL只能使用一个索引,会从多个单列索引中选择一个限制最为严格的索引。https://www.cnblogs.com/yelongsan/p/9405914.htmlInnoDB只有通过索引条件检索数据才使用行级锁,否则,InnoDB将使用表锁。也就是说,InnoDB的行锁是基于索引的!在表读锁和表写锁的环境下:读读不阻塞,读写阻塞,写写阻塞!InnoDB实现了以下两种类型的行锁。共享锁(S锁):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。也叫做读锁:读锁是共享的,多个客户可以同时读取同一个资源,但不允许其他客户修改。排他锁(X锁):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。也叫做写锁:写锁是排他的,写锁会阻塞其他的写锁和读锁。11.Mysql隔离级别1、 脏读:A,B两事务,A事务会读取到B事务未提交的数据,然后B因为某些原因回滚数据,所以A就读取了B没有提交的数据,也称脏数据。2、 不可重复读:在A事务中对同一数据两次查询不一致,可能原因是在A事务提交之前B事务对该数据进行了操作3、 幻读:类似于不可重复读,都是在一个事务周期内读的数据不一致,区别在于幻读是侧重于插入操作带来的影响,而不可重复读是编辑或者删除带来的影响————————————————1.未提交读(read-uncommitted)在一个事务中,可以读取到其他事务未提交的数据变化,这种读取其他会话还没提交的事务,叫做脏读现象,在生产环境中切勿使用。2.已提交读(read-committed)在一个事务中,可以读取到其他事务已经提交的数据变化,这种读取也就叫做不可重复读,因为两次同样的查询可能会得到不一样的结果。3.可重复读(repetable-read)MySQL默认隔离级别,在一个事务中,直到事务结束前,都可以反复读取到事务刚开始时看到的数据,并一直不会发生变化,避免了脏读、不可重复读现象,但是它还是无法解决幻读问题。4.可串行化(serializable)这是最高的隔离级别,它强制事务串行执行,避免了前面说的幻读现象,简单来说,它会在读取的每一行数据上都加锁,所以可能会导致大量的超时和锁争用问题。12.了解的加密算法常见的加密算法可分为三大类:对称加密,非对称加密和hash算法。对称加密:使用同一个密钥来加密和解密数据。DES,AES。非对称加密:使用RSA一般需要产生公钥和私钥,当采用公钥加密时,使用私钥解密;采用私钥加密时,使用公钥解密。RSA加密是对明文的E次方后除以N后求余数的过程。hash算法:MD5。13.OOM怎么解决1.java.lang.StackOverflowError栈空间溢出 ,递归调用卡死2.java.lang.OutOfMemoryError:Java heap space堆内存溢出 , 对象过大3.java.lang.OutOfMemoryError:GC overhead limit exceededGC回收时间过长过长的定义是超过98%的时间用来做GC并且回收了而不倒2%的堆内存连续多次GC,都回收了不到2%的极端情况下才会抛出如果不抛出,那就是GC清理的一点内存很快会被再次填满,迫使GC再次执行,这样就恶性循环,cpu使用率一直是100%,二GC却没有任何成果。4.java.lang.OutOfMemoryError:Direct buffer memory5.java.lang.OutOfMemoryError:unable to create new native thread 14.Java、Go、C++的优缺点15.判断链表是否对称扫描链表的所有节点并一一进栈,然后再扫描链表,和栈顶元素作比较,如果都相同,返回true,否则返回false16.20亿个数求中位数https://www.zhihu.com/tardis/sogou/art/112306835?ab_signature=CiRBQkN1S1RBTm1ROUxCVnc3NUY5YXBJQzJvTzlSaWxoTlc5VT0SIGYwMDkwNTRkYzFjMmQ5YjFmZTQ4ODgxNDExMzU1MWQ2GhAIARIGNi4zNC4wGgQxOTE2最后打个小广告:我们是瓴羊营销云部门,专注助力企业做好多平台的全域会员运营增长,提供全域采集监测与增长分析产品,通过数据赋能为企业提供从潜客挖掘、媒体智选、预算分配、营销标签模型预测分、实时营销增强API等全链路营销覆盖服务,开启户外和线上营销新时代,助力企业业务增长。邮箱投递:mofeng.lc@alibaba-inc.com,简历命名方式 姓名+岗位+手机号
点赞 9
评论 2
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-28 08:18
上海交通大学 嵌入式软件开发
只找Linux的工作 Stm32一点不学可以吗?
之前也有想要入行的学弟学妹们想要入行嵌入式,自己又找不到方向,问过我同样的问题,我的建议则是可以直接学习嵌入式Linux;如果你是普通大学的本科,嵌入式Linux方向,好好努力下把握住机会拿个10K左右问题不大,但是单片机呢?6K左右还要卷死,人多,但是对应的岗位也多。在这儿我想引用之前刚入行时两个朋友的经历供楼主做个参考;第一个朋友是双非一本机械电子工程硕士研究生,已经工作两年了,走的就是嵌入式Linux软件开发的岗位,他根本就没怎么玩过单片机,完全不影响在嵌入式行业拿高薪,他基本上就做一些纯软件的开发,比如最开始做一些QT啊、界面开发这一类的,基本上跟底层没有什么太多的接触,所以说即使没有...
点赞
评论
收藏
分享
07-13 12:18
华南师范大学 Unity3D客户端
气笑了
很难想象在当时考场上的人是怎么绷住的😂
Twilight_m...:
还是不够贴近现实,中关村那块60平房子200万怎么可能拿的下来,交个首付还差不多
点赞
评论
收藏
分享
06-09 16:42
门头沟学院 数据分析师
迪爷现在演都不演了
如图,不演了😁
S_Holmes:
一想到我苦苦追求的迪子私下里却是985的马子,我的心就在滴血😭😭😭
点赞
评论
收藏
分享
07-31 12:07
上海大学 硬件开发
韶音科技二面
感觉有点紧张,有几个问题答得不好,可能要凉了
韶音科技二面158人在聊
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
7794
2
...
虾皮秋招一面
3254
3
...
百度提前批 三面
2802
4
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
2774
5
...
小鹏offer
1558
6
...
被猿辅导挂了简历,但我想说...
1442
7
...
虾皮一面凉经
1393
8
...
最强本科✌
1369
9
...
上班一周,工资还没拿,先欠公司两千
1314
10
...
大学四年,我感觉我像个“孤勇者”
1289
创作者周榜
更多
正在热议
更多
#
简历上的经历如何包装
#
29663次浏览
822人参与
#
秋招被确诊为……
#
164198次浏览
753人参与
#
中兴秋招
#
205837次浏览
2296人参与
#
工作中哪个瞬间让你想离职
#
63750次浏览
569人参与
#
你最希望上岸的公司是?
#
135249次浏览
706人参与
#
和同事相处最忌讳的是__
#
24514次浏览
244人参与
#
25届网易互娱暑实进度
#
78445次浏览
702人参与
#
虾皮求职进展汇总
#
249507次浏览
1856人参与
#
投格力的你,拿到offer了吗?
#
86812次浏览
583人参与
#
2022毕业即失业取暖地
#
102719次浏览
662人参与
#
2022毕业生求职现身说法
#
89302次浏览
700人参与
#
秋招OC许愿
#
327832次浏览
2450人参与
#
你最近一次加班是什么时候?
#
71015次浏览
350人参与
#
26届的你,投了哪些公司?
#
45486次浏览
497人参与
#
你的秋招第一面感觉怎么样
#
76946次浏览
592人参与
#
柠檬微趣工作体验
#
6758次浏览
40人参与
#
你遇到最难的面试题目是_
#
16741次浏览
201人参与
#
我对___祛魅了
#
48698次浏览
441人参与
#
地平线求职进展汇总
#
52662次浏览
370人参与
#
研究所VS国企,该如何选
#
194859次浏览
1819人参与
#
如果校招重来我最想改变的是
#
271964次浏览
2853人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务