class="markdown_views prism-atom-one-light">
前言
本人目前是个大三的学生,最近一直在准备面试,就在今天上午电面试了两家内推的公司(闪电购,二维火),这两家公司都在杭州,本来他们要我去现场面的,因为来回不方便,然后就和他们HR谈了谈是否能够先电面,幸运的是她们给了我电面的机会。
2018.6.26 杭州-闪电购
这两家公司面试时间都为今天上午10点,首先9:40时二维火的HR先打电话给我,叫我10:00要保持电话的畅通。然后9:55左右,闪电购的电话打给我了,然后我们就开始电面了…
问了以下内容(有些记不起来了)
- 在学校的经历,项目经历
- 框架方面
解决乱码?
Json,如何在spring mvc中配置?
如何免密登录?
聊一聊分布式架构?
- core java
抽象类,接口区别?
HashMap实现原理?
集合:ArrayList,LinkedList?
拦截器,过滤器?
多线程共享资源同步?
4.你还要什么想要问的么
总之,我和面试官还是聊得比较可以,基本上我都答出来了最后他应该是打算让我过去了,让我去做他们的营销模块,让我等通知…
2018.6.26 杭州-二维火
刚面完闪电购后,没过多久,二维火来电话了。这个面试大概快面了1个小时左右,不过问的东西也是比较多的。
问了以下内容(有些记不起来了)
- 在学校的经历,项目经历
介绍你的项目,及你干了哪些模块
- 问技术了(问的顺序不记得了)
数组扩容机制:原理
消息队列:应用场景
Dubbo: 实现方式
Mybatis:动态sql
mysql查询优化,分库分表如何实现
你会怎么设计数据库表(原则3大范式)
索引,要怎么设
HashMap底层原理 怎么实现安全:CurrentHashMap
ArrayList,LinkedList,Vector区别?
场景:登录,如何做好安全机制,数字签名,token,shiro
场景:多线程,100个请求,服务端负载10个,如何解决:queue
多线程如何同步共享资源
分布式架构中,介绍一个你做的模块
Spring,spring mvc 谁的范围更大一些
jdk动态代理,cglib,如何在spring修改动态代理,jdk,cglib代理的区别
乱码问题:如何在web.xml中配置
拦截器,过滤器的区别,及如何实现
Aop,拦截器的区别,日志功能
Log4j ,slf4j,java自带的日志
抽象类,接口区别
重写和重载的区别
Jdk信号量?
bean装配方式,有什么区别?
Solr,搜索引擎?
你知道我们公司是干什么的么?
面试完后,我也是后知后觉,发现自己口干舌燥了,哈哈哈。不过在最后还是得到了面试官的肯定。其中我有一些技术不是很了解,然后面试官简单的告诉了我,让我可以在这方面加强点。这个面试官还是非常好的,然后没多久,立马就接到了二维火HR的电话,她们刚收的面试官的反馈信息,让我找个时间去她们公司见个面,交流交流。
大脑充电
- 数组扩容机制:
Arrays.copyOf()不仅仅只是拷贝数组中的元素,创建一个新的数组对象。
System.arrayCopy只拷贝已经存在数组元素。
System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));
original - 源数组。
0 - 源数组中的起始位置。
copy - 目标数组。
0 - 目标数据中的起始位置。
Math.min(original.length, newLength) - 要复制的数组元素的数量。
从速度上看:System.arraycopy > clone > Arrays.copyOf > for
- 消息队列:
- mysql查询优化:
1:查询语句where 子句使用时候优化或者需要注意的
2:like语句使用时候需要注意
3:in语句代替语句
4:索引使用或是创建需要注意
1.避免全表扫描,首先应该考虑在where,order by涉及的列上建立索引
2.尽量避免where的子句对null值判断,i=,<>否则将导致引擎放弃使用索引而对全表进行扫描Select from where num is null //我们可以设置默认值为0
3.用具体的字段代替*,不要返回用不到的字段
4.避免在where子句中使用or来连接条件,否则导致放弃使用索引而进行全表扫描。可以使用 union 或者是 union all代替。
5.很多时候用exists 代替 in是一个很好的选择。
索引创建需注意:
索引固然可以提高查询效率->降低insert,update的效率(会重建索引或是修改索引)
所以索引的创建要慎重,视情况而定。一个表中数量最好不要超过6个
导致全表扫描:
in,not in慎用->betweenLike ‘%李%’ ->考虑全文索引比如solr或是luncene
Hash/Btree索引区别?
索引帮助mysql获取数据的数据结构,常见的2种索引
Innodb,MYISAM引擎:Btree
Mermory:Hash
Hash:某类->hash->hash数组 (一次定位,效率高,btree经过多次磁盘io)
但是有好多缺点:不能查询范围,排序方面,hash大量重复效率低
Btree:
MyIsam:数据文件和索引是分开的,非聚集索引
- 数字签名:
签名认证是对非对称加密技术与数字摘要技术的综合运用
带有秘钥(公,私)的消息摘要算法,私:签名 公:验证
作用:验证数据的完整性,认证数据来源
- Java的三种代理模式
1.1.静态代理
1.2.动态代理(JDK代理,接口代理)
1.3.Cglib代理(基于继承的方式实现)(子类代理)
- java Semaphore信号量
Synchronized,lock:多个线程并发同一资源造成的数据不一致的问题
Semaphore信号量实现资源的多副本的并发访问控制,一个计数信号量,它的本质是一个”共享锁”。
Semaphore是用来保护一个或者多个共享资源的访问,Semaphore内部维护了一个计数器,其值为可以访问的共享资源的个数。一个线程要访问共享资源,先获得信号量,如果信号量的计数器值大于1,意味着有共享资源可以访问,则使其计数器值减去1,再访问共享资源。
Semaphore是用来保护一个或者多个共享资源的访问,Semaphore内部维护了一个计数器,其值为可以访问的共享资源的个数。一个线程要访问共享资源,先获得信号量,如果信号量的计数器值大于1,意味着有共享资源可以访问,则使其计数器值减去1,再访问共享资源。
就好比一个厕所管理员,站在门口,只有厕所有空位,就开门允许与空侧数量等量的人进入厕所。多个人进入厕所后,相当于N个人来分配使用N个空位。为避免多个人来同时竞争同一个侧卫,在内部仍然使用锁来控制资源的同步访问。