作者:怪地平小 链接:https://www.nowcoder.com/discuss/626697?type=all&order=time&pos=&page=1&channel=-1&source_id=search_all_nctrack 来源:牛客网
自我介绍
是考过研的, 对计算机网络有了解吗? 讲讲TCP协议, 讲讲TCP的三次握手. 为什么要三次握手, 两次可以吗?
TCP协议用于应用程序之间实现可靠通信。因为TCP是面向有连接的传输层协议,所以在通信之前会做好通信两端的准备工作。三次握手就是用于建立可靠的通信连接。第一次握手是客户端向服务端发送SYN同步信号,服务端接收到SYN同步信号后,会返回同步信号和确认应答信号。客户端接受到确认应答信号后就向服务端返回一个确认应答信号,服务端接收到一个确认应答信号双方就可以建立连接了。
进行三次握手的目的是为了防止失效的请求连接到达服务端后,服务端建立错误的连接。
讲讲数据链路层在网络中的作用, 比如物理层就是代表电信号传播, 那数据链路层是干嘛的呢? (这题我感觉没有太答上来, 我回答了数据链路层的MAC协议, 面试官说这个是从协议上看的. 于是我又从数据链路层对应的是交换机这一点上继续作答了)
数据链路层的作用是在互连的设备之间传输数据帧。
对操作系统有了解吗? 能讲讲进程与线程的区别吗?
进程是正在运行程序的实例,是资源调度的最小单位、一个程序中可以有多个进程;而线程可以看作是更小的进程,是CPU调度的最小单位,一个进程中的线程共享进程中的资源,包括打开的文件、地址空间以及全局变量
线程有调度算法, 进程也有调度算法, 能讲讲你知道哪些进程调度算法吗? (LRU(不太算); 先进的先运行; 按优先级顺序运行; 按占用时间最少优先)(这个答得不太好)
1.先到先得 2.短作业优先 3.时间片轮转 4.按照优先级 5.多级反馈
知道死锁吗? 能讲讲编码中怎么搞出来一个死锁吗? 如何预防死锁? (这里我答得银行家算法以及不同线程按同样顺序获取资源可以预防死锁)
当有两个或者是两个以上的进程互相等待对方的资源就会造成死锁。这里可以先分析死锁产生的条件:第一个条件是资源只能够被一个进程占用;第二个条件是一个资源被一个进程占用后不可以强行抢占;第三个条件是一个进程占用一个资源后,还可以继续等待其他的资源;第四个条件是至少有两个或者两个以上的进程在相互等待对方的资源,存在环路。针对这些条件就可以提出相应的解决方案:第一个就是手动抢占资源;第二个就是在占用资源前提前申请所需要的所有资源,如果不能够申请到,就放弃占用资源,等待一段时间后再申请;第三个是对资源进行编号,按照顺序占用资源。
Java里, equals()
方法和==
的区别? 都是怎么用的?
对于基本数据类型==
比较的是内容,对于引用数据类型==
比较的是内存地址;
Object类的equals
比较的是内存地址是否相等,如果想要比较内容是否相等就要重写equals
为什么说重写了equals()
方法就得重写hashCode()
方法呢?
hashcode
计算的是该对象的哈希码,用于确定该对象在哈希表中的位置,如果equals
相等那么哈希码一定相等,所以…
Java里, 你用过那些集合?
ArrayList,LinkList,HashSet,TreeSet
知道那些并发的关键字或者类?
synchronized,volatile,ThreadLocal,
之前你提到了AQS, 能再讲讲你之前说的那些类里面, 有哪些是使用了AQS实现的?
用线程的时候, 肯定是用线程池来获得线程的. 讲讲线程池的参数. 每个参数都是什么意思?
corepoolsize:核心线程数量:线程池中允许运行的最小线程数
maximunpoolsize :最大线程数:当等待任务等于等待队列的容量时,线程池中的运行线程数为最大线程数
keepAliveTime: 当任务数小于核心线程数时,核心线程外的线程不会立刻销毁,而是等到keepAliveTime后才销毁
unit: keepAliveTime的时间单位
workqeque: 等待队列,当任务数大于核心线程数,会将任务放在等待队列中进行等待
ThreadFactory: 饱和策略,当运行的线程数等于最大线程数,并且等待队列满了,如果这个时候有新的任务来了,会根据任务拒绝策略处理这个新来的任务
handler:饱和策略
Spring两个重要的特性是什么(AOP, IOC), 都干嘛的?
Spring中, 你用过@Controller
, @Service
, @Component
注解吗? 他们的作用是什么? (作用一样) 为什么要单独弄出来这么多个作用一样的?
@Autowired
和@Inject
住解都是用来干嘛的, 有什么区别?
你的项目里用的数据库是MySQL吗? 有多少条数据(10条不到)? 那你有没有用到索引?(innodb默认给主键加上了聚簇索引)
看来你知道索引的, 能讲讲索引是以什么数据结构组织的吗? (b+树, 而且索引单独以一个文件保存)
作者:wao3 链接:https://www.nowcoder.com/discuss/630466?type=post&order=time&pos=&page=1&channel=-1&source_id=search_post_nctrack 来源:牛客网
讲项目 Spring、SpringMVC IOC和DI的关系 依赖注入的方式 看过Spring底层源码没? 看过SpringMVC底层源码没? SpringMVC的注解 @RequestBody的原理 SpringMVC 如何将URL映射到指定的方法上 JVM对象内存布局
JVM对象内存布局分为对象头,实例数据和对齐指针。
JVM运行时数据区
包括了堆、方法区、栈和程序计数器。其中对用于存放对象;方法区用于存放加载的类型信息字段信息、方法信息、静态变量和常量;每一个方法的开始调用和结束都对应一个栈帧的入栈和出栈,栈帧包含了局部变量表、操作数栈、动态连接、方法出口等信息、、。
字符串常量存在哪个位置?
存放在方法区中的运行时常量池中
程序计数器的作用
class文件的行号指示器
异常或者递归时,程序计数器是怎样的? 讲讲垃圾回收算法
垃圾收集算法包括了,标记-清除算法;标记-复制算法以及标记-整理算法;标记-清除算法就是标记存活的对象,将没有被标记的对象进行回收,这种方法有可能会产生空间碎片,比较适合在老年代使用;标记-复制算法就是将内存一分为2,每次只将对象放在其中一部分,当这部分空间不足的时候,就将存活的对象复制到另一部分,使用这种方法可用于存放对象的空间就减半了,适合新生代进行垃圾回收。标记-整理算法就是在标记-清除算法的基础上,标记存活的对象然后将存活的对象移动到内存的一个角落,然后进行回收,因为这个方法多了一个移动的步骤,所以效率较低。
如何解决跨代引用
JDK8是怎样解决跨代引用的? 了解CMS吗?讲讲CMS的步骤 了解JVM调优吗? 重写finalize后的垃圾收集 JUC是基于什么搭建起来(想问volatile,我答的AQS) 讲讲volatile AQS和volatile的关系?(state用volatile修饰) 讲讲重排序 线程池用过吗?讲讲线程池参数
有哪些拒绝策略
- 直接异常,阻止系统正常工作
- 放弃执行无法处理的任务,不做任何处理
- 将任务队列中最老的n那个任务丢弃
- 使用调用者线程来执行任务
讲讲线程池加入任务的步骤
项目中用过线程池吗? redis的set底层原理 redis的IO模型 讲讲IO多路复用 讲讲HTTP协议 讲讲HTTP2.0 讲讲MVCC 讲讲数据库中的锁 讲讲你熟悉的设计模式? 手写一个适配器模式(有点卡壳,然后让我写一个观察者模式也行) 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL? 算法题:链表中倒数第k个节点
作者:wao3 链接:https://www.nowcoder.com/discuss/630466?type=post&order=time&pos=&page=1&channel=-1&source_id=search_post_nctrack 来源:牛客网
你认为你一面有哪些问题回答得不好? 谈谈你对MVC的理解? MVC和MVVM的区别?谈谈各自的优缺点 在学校有实验室项目吗?(有个前端的) 找实习为什么不选前端? 怎么学习框架和中间件的? 怎么看的书? 为什么不考研? 问项目 还有过什么团队合作经验吗? 你觉得后端开发需要做哪些工作?
1.参与产品评议会议
2.前后端沟通确定API文档
3.数据库变更设计
4.第三方服务选型
5.实现业务逻辑
6.自测并跑通产品业务流程
7.组织前后端联调
8.交付产品经理确认
9.交付测试确认
10.正式上线产品功能
写代码,三个线程按顺序轮流打印5个数,打印到60为止。
比如: 线程1:1 2 3 4 5 线程2:6 7 8 9 10 线程3:11 12 13 14 15 线程1:16 17 18 19 20 … 顺序打印到60为止
作者:十二月的流浪肖邦 链接:https://www.nowcoder.com/discuss/430055?type=post&order=time&pos=&page=1&channel=1009&source_id=search_post 来源:牛客网
http属于七层网络协议的哪一层
http协议是否可靠
不可靠、通过http协议可能会存在几个问题,第一个是通信过程中信息可能会被窃听,第二个是通信双方的身份无法进行确定,第三个是通信的信息有可能会被篡改;
因此可以采用https进行传输;https就是在http+通信加密+身份认证+完整性保护;通信加密是通过非对称加密和对称加密相结合的方式实现;身份认证是通过第三方认证机构进行实现;完整性保护是通过确认报文摘要来实现;
session与cookie
因为http协议是不保存状态的协议;因此需要借助一些其他的手段来达到保存通信状态的目的;cookie就是将用户的信息保存在浏览器中,浏览器对服务器发送请求的时候会将cookie带上,服务器通过cookie来识别来访者的状态,比较常见的应用场景就是在一个购物网站中跳转不同的页面,登录的状态是一直保持不变的。session就是将用户的信息保存在服务端,通过sessionID来进行识别,浏览器对服务器发送请求的时候会在cookie中带上sessionID,比较常见的应用场景就是给购物车添加商品,通过session来跟踪用户。
四次挥手
操作系统:
线程与进程
进程是正在运行程序的实例、是资源调度的最小单位;而线程可以看成是更小的进程、一个进程中可以有多个线程、这些线程是相互合作的、并且共享进程的资源。
进程的状态转变
进程的状态有:新建、就绪、运行、阻塞和结束
MySQL:
innoDB引擎与MyIASM引擎的区别
innoDB:支持事务;MyIASM:不支持事务
innoDB:即支持行锁也支持表锁;MyIASM只支持表锁
innoDB:支持外键;MyIASM不支持外键
innoDB:支持MVCC;MyIASM: 不支持MVCC
事务隔离级别
读未提及
读提交
可重复读
串行
mysql索引最左前缀原则
mysql的mvcc怎么实现的
Java基础:
static关键字
threadLocal
线程池七大参数
核心线程参数:线程池中最小正在运行的线程数
最大线程参数:当等待队列满时,会调用其他的线程,这个参数规定了线程池中的最大线程参数
等待队列:当新任务来时,如果核心线程全部处于运行状态,会将新任务放在等待队列中
keeplivetime:当任务数小于核心线程数时。其他的线程不会立刻销毁,而是等待keeplivetime时间后才销毁
keeplivetime的时间单位
Handel:任务拒绝策略
threadfactory:
当线程数等于最大线程数,并且等待队列也放满,这个时候如果又来了新的任务,该如何处理呢:
1..直接抛出异常 2.直接忽略新任务,不处理 3.丢弃等待队列中最老的任务 4.将队列中的任务放在调用者线程中执行
协程
equal与hashcode
hashMap
linux: 常用指令
常用查找方式
where\whereis\find\
作者:十二月的流浪肖邦 链接:https://www.nowcoder.com/discuss/430055?type=post&order=time&pos=&page=1&channel=1009&source_id=search_post 来源:牛客网
浏览器输入 www.meituan.come之后发生的事
TCP如何保证可靠性
http与https
http状态码
1xx:正在进行处理
2xx: 处理成功;200:成功处理;204:不包含内容实体;203:返回范围内的部分内容
3xx: 重定向:301:永久重定向;302:临时重定向;303:与302类似,明确要求客户端应该采用 GET 方法获取资源
4xx: 客户端出错:403:禁止访问;404:页面不存在
5xx: 服务端出错;500:服务端正在执行请求时出现错误;503:超负载或正在维修
CountDownLatch、CyclicBarrier、Semaphore 实际用法与原理比较
线程之间的通信
volatile
等待/通知机制 –>wait 和 notify
synchronized与Lock的区别
synchronized:重量级锁,是基于JVM实现的,是隐式的获得锁和释放锁,只能够实现非公平锁,是悲观锁
Lock是一个接口:ReentrantLock通过lock和unlock显式的获得锁和释放锁,是基于API层面实现的,既能够实现公平锁又能够实现非公平锁。是乐观锁。
AQS原理
AQS就是如果共享变量是空闲的,不被其他线程占用,就可以直接占用共享变量,并加锁。如果共享变量被其他线程占用了,就将线程封装成一个节点加入到同步队列中。
负载均衡算法
阻塞队列
多线程创建方式并比较
1.通过继承Thread直接创建
2.通过实现running接口创建,重写run()方法创建
3.通过实现Callable接口,重写call()方法创建
2,3的区别在于3可以返回一个future类型,而2没有返回值,并且call方法会抛出异常而2不会
作者:求offer求鞭挞 链接:https://www.nowcoder.com/discuss/416239?type=post&order=time&pos=&page=1&channel=1009&source_id=search_post 来源:牛客网
spring的IOC,AOP原理 springmvc的工作流程 handlemapping接收的是什么 项目中你用到了MyBatis,说说#和$的区别? MyBatis你写的XML怎么绑定对应的接口?namespace.id Spring有几种方式定义Bean。 git你用过哪些命令?
git add.
git commit -m ""
git push origin master
那你知道怎么强制push吗?
git push -f origin master
linux怎么在查找目录下的一个文件?
find . -name "文件名"
–>在整个磁盘进行寻找
locate
、whereis
–>在数据库进行寻找
集合类了解吗?知道哪些集合? 集合类之间的继承结构是怎样的? this和super关键字的区别?
this相当于指向当前对象的一个指针,而super相当于指向当前对象最近一个父类的一个指针
你说你了解HashMap,说说1.7和1.8的底层结构,以1.7为例说说put的流程 HashMap线程安全吗?不安全的场景? HashMap里负载因子设置大会怎样?设置小会怎样? JVM有哪些GC算法,各自优缺点 一个表有学生、成绩、科目三列,怎么查各科最好成绩
|
|
|
|
|
|
InnoDB聚簇索引和非聚簇索引的区别
最左前缀原则 怎么删表?drop、truncate、delete
drop: 删除整个表 drop table 表名
–>清空表的数据以及表的结构
truncate: 清空表数据 truncate table 表名
–>清空表的数据但是不清空表的结构
delete:删除表中的某一行 delete from 表名 where 指定某一行
update: 将表中某一行数据进行更新 update 表名 set 列名=值 where 指定的行
alter: 对表的一列进行操作 alter table 表名 add 列名 数据类型
–>给表添加一列 ; alter table 表名 drop 列名
–>将表的一列删除
线程状态有哪些
新建,准备,运行,阻塞,结束
wait和sleep的区别
wait会将当前占有的锁释放掉,并进入等待队列,而sleep不会释放掉当前占有的锁,而是进入睡眠状态。
sleep是Thread的静态方法,而wait是Object的方法
wait需要在同步语句块中使用
start和run方法的区别 redis基本数据结构 redis单线程模型 leetcode 41题,On复杂度写
作者:求offer求鞭挞 链接:https://www.nowcoder.com/discuss/416239?type=post&order=time&pos=&page=1&channel=1009&source_id=search_post 来源:牛客网
描述从输入一个url到得到结果的过程 springMVC的执行过程 MVC设计模式 类加载 双亲委派机制 static变量初始化在哪个阶段 jvm内存区域分布 jvm堆中的内存区域分布 垃圾收集算法 什么时候发生fullgc,minorgc CMS收集器,为什么要初始标记和重新标记要stop the world? final、finally、finalize() synchronized和volatile volatile是线程安全的吗?举个例子 synchronized是可重入的吗?是公平还是非公平 公平锁和非公平锁的区别 synchronized的偏向锁,轻量级锁,重量级锁 synchronized修饰静态方法和非静态方法的区别?class对象,对象实例作为锁 threadlocal底层原理 redis如何实现高并发 mysql的主从复制机制 设计选课考试系统的表,功能有学生选课、学生考试、学生查询成绩。 有10亿个电话号码,找出重复的。 编程:将阿拉伯数字转换成中文数字。如(int)123456->十二万三千四百五十六
作者:求offer求鞭挞 链接:https://www.nowcoder.com/discuss/416239?type=post&order=time&pos=&page=1&channel=1009&source_id=search_post 来源:牛客网
30min 直接深挖项目 实习过吗? 主要负责哪些功能模块? 登录怎么实现权限验证? 数据库多少用户人数? 数据库隔离级别? 数据库最大的表大概多大?(好细啊) 数据库查询优化怎么做的? 怎么看用expain查sql语句执行计划的结果? 怎么记录用户的登录状态?(业务场景下多种实现思路) cookie和session? 分布式session? 了解哪些分布式的技术? zookeeper的应用场景? zonkeeper如何实现分布式锁? 有什么要问的?
作者:linlinnnn 链接:https://www.nowcoder.com/discuss/637783?type=2&channel=-1&source_id=discuss_terminal_discuss_hot_nctrack 来源:牛客网
1.Object类中都有什么方法呢
clone
, toString
, wait
, notify
, notifyall
, ``
2.hashcode()和equals的关系是什么?重写equals一定要重写hashcode吗 \3. hashmap的底层?红黑树相比于链表好在哪?为什么链表长度大于8的时候要转换为红黑树(为什么是8)? \4. 实际应用中是谁在调用wait()方法,线程发生了什么?线程被挂起在哪里?wait和sleep的区别? 5.wait和notify是使用的时候要配合什么关键字?为什么要在sychronized代码块中调用wait? 6.可重入锁?重入多次的话锁是怎么释放的? 7.happen-before原则?满足happen-before原则的关键字有什么?讲一下volatile?JMM,具体讲一下指令重排 8.解释一下JIT?(什么玩意) 9.JDK1.8中内存的JVM内存的分配情况?运行时常量池具体在哪里 10.GC算法 11.讲一下https。为什么要采用混合加密的方式?相对于直接采用非对称加密效率是快了还是慢了 12.http状态码3xx是什么?302和303的区别是什么
重定向
13.innoDB底层索引和行锁、表锁的关系 14.B+树和B树的区别,为什么要使用B+树不用B树?
算法题:树的层序遍历
表达式求值
思路:将字符串分别进栈操作,当栈顶为"and"时弹出并操作,保证栈中只有"true”,“false”,“or”,随后再进行判断
|
|
通配符匹配
|
|
美团骑手包裹区间分组
|
|
字符串子序列的个数
|
|
|
|
切蛋糕
|
|
|
|
求不高兴度
|
|
|
|
|
|
跳方格
|
|
前缀和
|
|
|
|