毕业求职季-听说你想去大厂看学姐,带你看看网易java面经
Posted 文宇肃然
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了毕业求职季-听说你想去大厂看学姐,带你看看网易java面经相关的知识,希望对你有一定的参考价值。
前言
毕业求职季,你准备好了吗?希望各位小伙伴能够苦练技术,早日达成自己心仪的offer。
下面是博主收集的一些关于面试的比较帮的面试题目,有需要的小伙伴可自行订阅下载。
Spring系列面试题129道(附答案解析)
Redis,快看看这40道面试题
MyBatis的27道面试题
73道Java面试题合集-多线程与进程
28道ZooKeeper面试题
【一面】
1.为什么做这个分布式的项目?说说你对分布式的理解?
1. 如何理解“分布式”?
经常听到”分布式系统“,”分布式计算“,”分布式算法“。分布式的具体含义是什么?狭义的分布是指,指多台PC在地理位置上分布在不同的地方。
2. 分布式系统
分布式系统:多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任务”。
分布式程序: 运行在分布式系统上的计算机程序。
分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。
区分分布式计算和并行计算:共同点都是大任务划分为小任务。不同点: 分布式计算:基于多台PC,每台PC完成同一任务中的不同部分。分布式的计算被分解后的小任务互相之间有独立性,节点之间的结果几乎不互相影响,实时性要求不高。并行计算:基于同一个台PC,利用CPU的多核共同完成一个任务。
1)分布式操作系统
分布式操作系统:负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。
2)分布式文件系统
分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。
3)分布式程序设计和编译解释系统
分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。
分层应用程序可以按层数进行划分,信息可以从数据层(通常存储在数据库)传送到表现层(显示在客户端上)。通常每层相对于其他层来说都运行在不同的系统中,或者在同一系统中的不同进程空间里。分层好处:减小整个应用程序的复杂性;使应用程序能够更好的扩展,跟得上企业发展的需要。
两层应用程序: 典型的结构,一个客户端的用户PC机(前端);一个包含数据库的网络服务器(后端)。逻辑上根据两者的物理位置划分。通常客户端包含大部分业务逻辑,随着数据库及存储过程的发展,SQL语言允许业务逻辑在数据库服务器中存储并执行。
三层应用程序:目前最常用的是三层应用程序结构,包含一个用户服务层(表现层),一个业务服务层和一个数据服务层。业务逻辑层从用户界面和数据源中分离出来。 由于两层应用程序即客户端/服务器端结构的功能限制,分布式应用程序通常分为三层或者更多层。每层的组件都执行一个特定类型的处理。
3)分布式数据库
之我见:分布式数据库,由分布在不同地方(地理位置上的分布)的多个数据库(称为站点)连接(基于计算机网络来连接)而成。利用分布式DBMS对各个站点统一管理,各个站点逻辑上统一起来。基于数据分布的透明性,仿佛在管理单个站点上的数据。其优点在于:容错,提高访问速度。
wiki官方解释: 分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元称为站点或结点。分布式数据库有一个统一的数据库管理系统来进行管理,称为分布式数据库管理系统。
分布式数据库的基本特点包括:物理分布性、逻辑整体性和站点自治性。从这三个基本特点还可以导出的其它特点有:数据分布透明性、集中与自治相结合的控制机制、适当的数据冗余度和事务管理的分布性。分布式数据库按照各站点中数据库管理系统的数据模型的异同分为异构型分布式数据库和同构型分布式数据库,按照控制系统的类型分为全局控制集中性、全局控制分散型和全局控制可变型
2.Redis怎么用的?
3.缓存中存什么数据?
4.如何保证数据库和缓存的一致性?
我们日常开发中,对于缓存用的最多的场景就像下图一样,可能仅仅是对数据进行缓存,减轻数据库压力,缩短接口响应时间。
这种方案在不需要考虑高并发得去写缓存,高并发得读写缓存时,是不会有问题,但是如果是在高并发场景下,要保证缓存和数据库的一致性,至少需要解决以下问题:
高并发写时的数据不一致问题
高并发读写时,请求执行各步骤的顺序是不可控的。假设此时有一个请求A,B都在在执行写流程,请求A是需要将某个数据改成1,请求B是需要将某个数据改为2,执行操作如下时就会导致数据不一致的问题:
1.请求A执行操作1.1删除缓存。
2.请求A执行操作1.2更新数据库,将值改为1。
3.请求B执行操作1.1删除缓存。
4.请求B执行操作1.2更新数据库,将值改为2
5.假设说请求B所在服务器网络延迟比较低,请求B先更新缓存,此时缓存中的key对应的value是2。
6.请求A更新缓存,将缓存中B更新的数据进行覆盖,将key对应的值改为1。
此时数据库中是B修改后的数据,值为2,而缓存中的数据是1,这样在缓存过期钱,用户读到的都是脏数据,与数据库不一致。
高并发读写时的数据不一致的问题
高并发读写时,请求执行各步骤的顺序是不可控的。假设此时有一个请求A在执行写流程,将原值由1改成2,请求B执行读流程,执行操作如下时就会导致数据不一致的问题:
1.写请求A执行1.1操作删除缓存key,value是原值1。
2.读请求B执行2.1操作发现缓存中没有数据,就去执行2.2操作读数据库,读到旧数据,值为1。
3.写请求A执行1.2操作更新数据库,将数据由1改为2。
4.写请求A执行1.3操作更新缓存,此时缓存中的数据key对应的value是2。
5.读请求B执行2.3操作更新缓存,将之前读到的旧数据1设置到缓存中,此时缓存中的数据key对应的value是1。
所以如果说读请求B所在服务器网络延迟比较高,去执行2.3操作比写请求A晚,就会导致写请求A更新完缓存后,读请求B使用之前读到的旧数据去更新缓存,此时缓存中数据就与数据库中的不一致。
解决方案
保证数据一致性,网上有很多种方案,例如:
1.先删除缓存,再更新数据库。
2.先更新数据库,再删除缓存。
3.先删除缓存,再更新数据库,然后异步延迟一段时间再去删一次缓存。
5.什么时候需要用到这些nosql或者ES?
6.说下什么是反向代理?
反向代理是指服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在。
两者区别:
1、用途差异
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率;
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
2、安全差异
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此必须采取安全措施以确保仅为经过授权的客户端提供服务;反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
7.Linux中怎么查看文件的末尾几行?(tail命令)
8.如果linux负载过高,如何查看linux运行情况?
9.如果linux负载过高,怎么定位哪个进程的哪一行代码出问题了?
10.你的项目在linux中是如何部署的?
11.mysql一条sql非常慢,如何进行分析?(explain)
12.mysql什么时候分库分表?
13.ArrayList和LinkedList的区别?
14.CAS说下?
15.泛型说下?泛型的好处?
16.exception和error的区别?
1.异常:这种情况下的异常,可以通过完善任务重试机制,当执行异常时,保存当前任务信息加入重试队列。重试的策略根据业务需要决定,当达到重试上限依然无法成功,记录任务执行失败,同时发出告警。
2.日志:类比消息中间件,处在不同线程之间的同一任务,简单高效一点的做法可能是用traceId/requestId串联。有些日志系统本身支持MDC/NDC功能,可以串联相关联的日志。
- Throwable:它是异常处理机制的基本组成类型,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch)。
- Exception 和 Error 都是继承了 Throwable 类。
Exception 和 Error 体现了 Java 平台设设计者对不同异常情况的分类。
- Error:系统错误,虚拟机出错,我们处理不了,也不需要我们来处理。比如OutOfMeoryError。
- Exception:可以捕获的异常,且作出处理。也就是要么捕获异常并作出处理,要么继续抛出异常。
Exception又分为检查型异常和非检查型异常
- 检查型异常:在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。如FileNotFoundException客户端需要知道是文件没有找到的问题,客户端可以通过其它方法来解决这个问题如更换其它路径等。
- 非检查型异常:就是所谓的运行时异常,类似 NullPointerException,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。
17.什么是类型擦除?
18.什么时候发生栈溢出?举个例子?
19.如何设计秒杀系统?
20.反问为什么面试时间这么短?(说如果他觉得我能进二面就没有必要继续面了)
技术栈?
面试表现?
【二面】
二面面试官可能能看到一面的评分吧,可能对我期望比较大,让他老人家失望了。。。
1.项目的难点?( 我说的和4G模块通信,然后一顿BIO/NIO/AIO怼上来,答不上来,只能大眼瞪小眼,自己给自己挖坑。。)
2.使用Redis做了什么?
3.分布式锁怎么做的?
4.分布式锁,如果向主机加锁,但是还没同步到从机,此时主机宕机,重新选取了一个从机,那么此时是不是就会重新获取到锁(回答的redlock算法)
5.mysql的复制方式?(只回答出来异步复制?)问还有没有其他的,回答:不知道。。。
6.分布式事务?二阶段提交、三阶段提交、TCC?区别?优势???( 自闭+1)
7.如果是2pc,准备阶段成功之后,但是提交的时候一方没有提交成功,会怎么样?会不会回滚?(蒙的会回滚, 自闭+1)
8.我觉得你很多东西掌握的也不扎实呀??????(可能一面面试官对我评价太高了,让他失望了,自闭+1)
9.你觉得数据结构和算法怎么样?做个简单算法题吧。
简单的判断链表是不是有环?使用快慢指针做的,并且通过了,问还有没有更优的?他说可以不考虑空间复杂度,我说可以用HashSet??
我快慢指针的时间复杂度是O(n),空间复杂度O(1),如果使用HashSet之后,不是时间复杂度还是O(n),空间也是O(N)???难道是考虑如果环比较大的时候,快慢指针效率低??
10.说我简历上掌握的知识面挺多的,问平时怎么学习的?
没有反问环节,以为凉了。。
【HR面】
HR面,一共30分钟整。没有自我介绍,没有反问。
1.上来就是为什么要选杭州?为什么不去北上广?
2.目前都投了哪些公司?
3.目前都拿到了什么offer?(hr难道是认为我太菜了,然后张大嘴20s。。。)
4.说下超出你预期的事情?
5.经历的比较有成就感的事情?
6.项目中遇到的最有挑战性的问题?怎么解决的?然后一顿问(大概10分钟)
7.和别人沟通时遇到的矛盾,怎么沟通的?怎么解决的?
以上是关于毕业求职季-听说你想去大厂看学姐,带你看看网易java面经的主要内容,如果未能解决你的问题,请参考以下文章
毕业求职季-听说你想去大厂看学妹,带你看看字节跳动产品经理面试长啥样?
毕业求职季-听说你想去大厂看学妹,带你看看阿里后端实习面经长啥样?
毕业求职季-听说你想去大厂看学妹,带你看看字节广告运营岗面试长啥样?
毕业求职季-听说你想去大厂看学妹,带你看看字节跳动抖音电商后端面试长啥样?