网易一面(2月24日下午两点)
体验
面试难度还行,问的大多数比较偏基础,没那么多八股文,注重实践应用,更多的是给一些特定的场景和你讨论你的解决方案和会遇到的问题
面试官人挺好的,整个过程挺耐心听我讲并且还会和我一起分析,一次很有收获的面试经历。
记住的都写在下面了
面试时长:52分钟
面试方式:电话
面试部门:网易新闻
自我介绍
我是XXX,是一名来自双非XXXX大学啥也不会的学生…
项目,大约半小时,下面的问题也是聊项目过程中问的一些问题
在项目上线后的某一高峰期,大量用户同时访问系统产生的高并发问题,你们怎么做预防处理的?
问的有点突然…没做啥准备
网关层:流量限流,设置系统接受的最大请求数,其余全部打回
中间层:根据特定业务需求使用Redis作缓存,吃掉部分请求
持久层:数据库MySQL主从复制,读写分离,负载均衡,分库分表等
在做项目过程中,有没有遇到什么数据库问题?怎么解决的?排查Bug的流程能说说嘛
em…说太多了…如实的回答了记得在写项目时出现过的一个小问题,但是排查了很久的Bug。最后查出来的问题是数据库一个字段的存储大小设小了
在你项目中,为什么要使用Redis呢?具体在哪些业务场景使用了?
Redis是C语言开发的一个开源的高性能键值对(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库。可以用作数据库、缓存、消息中间件等
Redis作为一个内存数据库,性能优秀,数据在内存中,读写速度非常快,支持并发10W QPS;支持丰富的数据结构类型;线程安全,单进程单线程,采用IO多路复用机制;支持数据持久化,可以将内存中数据保存在磁盘中,重启时加载;主从复制,哨兵,高可用;可以作为消息中间件使用,支持发布、订阅消息系统
在实际项目中,使用Redis作为缓存会遇到什么问题呢?
缓存和数据库数据一致性问题:分布式环境下容易出现缓存和数据库间数据一致性问题。
如果项目业务要求数据强一致性的,那么就不要使用缓存。只能采取合适的策略来降低缓存和数据库间数据不一致的概率,无法保证强一致性。合适的策略有缓存更新策略,更新数据库后及时更新缓存、缓存失败时增加重试机制
说一说Redis支持的数据类型吧
字符串、哈希、列表、集合、有序集合
可以简单介绍下并且说说常见的具体应用场景
扔了一个场景题,好像是关于排行榜,具体题目有点忘了
我说的是使用有序集合zset这一类型。然后补充说了zset的特性和数据结构。然后他问了具体实现命令…我说忘了
算法题,不难,思路秒了,实现过程有点小插曲
太紧张,脑子瓦特了。
C++写算法写多了,Java字符串截取方法我整错了,过了五分钟才想起来hhh
(因为字符串String我答的有点不顺畅,因此继续问)了解StringBuffer和StringBuilder嘛?说说它们之间有什么区别吧
可变
String类中使用final关键字修饰字符数组来保存字符串,所以String对象是不可变的。而StringBuilder与StringBuffer都继承AbstractStringBuilder类,查看源码可知,底层也是使用字符数组实现的,但是没有使用final关键字修饰,因此这俩都是可变的
线程安全
String中的对象是不可变的,也就是可以理解为常量:线程安全
StringBuffer对方法都加了同步锁或者对调用方法加了同步锁,所以是线程安全的;而StringBuiler没有对方法进行加同步锁,所以线程不安全
性能
每次对String类型进行改变的时候,都需要生成一个新的String对象,然后将指针指向新的String对象。StringBuffer每次都会对对象本身操作,而不是生成新的对象并改变对象引用。同等情况下使用StringBuilder要优于StringBuffer性能
总结:
操作少量数据:String单线程操作字符串缓冲区下操作大量数据:StringBuilder多线程操作字符串缓冲区下操作大量数据:StringBuffer
中间问了一些Spring、SpringMVC、SpringBoot,具体有点忘了,答的也不是很好,没多问
我们来聊聊,Java集合吧,你了解HashMap嘛?说说它的原理
扩容机制?
在高并发环境下,是线程安全的嘛?若线程不安全,那会有什么问题嘛?
如何保证HashMap线程安全?
你能说说什么是线程安全,什么是线程不安全嘛?(没答好)
当多个线程访问一个对象时,如果不用进行额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个对象是线程安全的
数据库应该怎样设计?
被为难的操作…
MySQL索引?索引失效?
反问:
您觉得我有什么需要注意的地方或者更好的建议?
什么时候有面试结果?
后续操作,这几天保持电话畅通,等HR电话通知
感触
总的来说,大部分时间都在聊项目,充分的准备好项目还是很有必要的。很意外,没有问JVM/GC、计网(正好还没看)、多线程也只问了基础…问的项目中牵扯到的技术和基础更多一些,或许是我太菜哈哈哈
这是准备这么久以来第一次面试,不管过不过,保持乐观,继续向前走,加油早日拿Offer!!!
网易二面(3月3日晚上7点)
体验
大部分时间都在聊项目,问的比较深入。
面试官人挺好的,整个过程挺耐心听我讲并且还会和我一起分析,一次很有收获的面试经历。结束后给了我很多建议,非常有用
记住的都写在下面了
面试时长:52分钟
面试方式:电话
面试部门:网易新闻
自我介绍项目(40分钟左右吧)JDK最新版了解嘛?有哪些特性(不会)JDK1.8 新特性常用的Java集合类ArrayList和LinkedList区别HashMap实现原理HashMap链表什么时候转为红黑树扩容机制线程安全嘛?ConcurrentHashMap如何实现线程安全的HashSet底层实现JVM了解嘛?Java new一个对象的过程JVM内存结构(没答好)GC垃圾回收算法什么时候对象可以被收回?NIO(不会)索引B+树知道哪些索引建立一个非主键索引,MySQL怎么实现的?(不会)你平时是怎么学习的?反问:
对我的面试过程的建议什么时候出结果?