面试被问到的一些问题

1.多线程的问题

volatile:保证了变量的可见性,一般可用于多个线程中的判断

Thread.sleep(long)可以不在synchronized的块下调用,而且使用Thread.sleep()不会丢失当前线程对任何对象的同步锁(monitor);
 object.wait(long)必须在synchronized的块下来使用,调用了之后失去对object的monitor, 这样做的好处是它不影响其它的线程对object进行操作。

如何等待线程的处理结果:feature模式

2.系统的整体架构

3.浏览器输入网址后到底经历了哪些步骤

DNS域名解析

TCP连接的建立,三次握手

发起HTTP连接

到nginx

到web服务器

找到html文件

浏览器解析html代码,并请求html代码中的资源

到web服务器,再通过rpc到service,再到数据库

浏览器对页面进行渲染呈现给用户

TCP断开连接

4.数据库存储引擎,我们用的是哪种,为什么要用这种?

用SHOW ENGINES; 来查询数据库的存储引擎。

用的是InnoDB存储引擎,支持事务。

MyISAM基于ISAM存储引擎,MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键。

MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。

5. map,arrayList, linkedList数据结构

map是由数组+链表组成的, map扩容,resize();

arrayList数组

linkedList就链表

6.服务突然挂掉后的排查方案

看jvm日志, +HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/dump.bin -XX:+PrintGCDetails -XX:ErrorFile=/data/logs/dump-error.log

7.rpc与http哪个好哪个差,为什么?

rpc :序列化与反序列化

http比rpc多了几次握手,还有josn的解析转换等。

8.vue的生命周期

vue能简单使用,但不时很熟

9.vue怎么做到双向绑定

应该是有监听机制,具体没了解

10.缓存与数据库一致性问题

写数据时,先删除缓存,再写数据库

读数据时,先读缓存,没有就都数据库,再写缓存

在分布式环境下上面的思路还有漏洞。

用分布式锁

11.集群与分布式有什么区别

集群是一个服务部署多个实例

分布式是按业务拆分不同的独立的服务

12.集群部署时,开发代码应该注意什么

session共享,可使用Redis来保存会话

synchronized方式不再适用,应使用分布式锁

13.dubbo的架构

服务提供方发布服务到服务注册中心;

服务消费方从服务注册中心订阅服务;

服务消费方调用已经注册的可用服务;

还有监控与后台管理

14.mysql数据库的乐观锁与悲观锁怎么实现

乐观锁 表结构加版本字段,更新时检查版本号。

悲观锁 查询时加for update

15.mysql的主从备份原理

通过bin-log日志,下面是百度的答案。

master开启bin-log功能,日志文件用于记录数据库的读写增删
需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,
Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。
MASTER服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。
slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。
slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。

16.不用标签语言,js怎么在页面中插入表格?

这其实是js基础,

var tab = document.createElement("table");
tab.rows[i].insertCell(j).innerHTML=i+''+j;
29                 tab.rows[i].cells[j].style.background='green'

17.消息队列的实现原理

简单的说,生产者将消息发送到mq服务器,mq服务器将消息保持到队列中,在将消息发送到监听者。 还有失败重试,消息的事务支持,如果一个消息处理失败,事务回滚,消息重新回到队列中。 还有消息的持久化。

18.对java封装、继承、多态是怎么理解的。

这是java基础

19.公司没有专门的产品经理,药剂直接出差到客户现场,将客户的描述转换成功能。

这个也没有太好的办法,只有加强沟通。沟通完后,再后续的工作过程中找几个里程碑跟客户确认,免得做的系统不是客户想要的。

20.你组里的一个开发,代码一直写的很烂,你怎么处理。

通过开发前的代码设计,后面的代码走查,复盘来解决。

21.高并发的问题

我觉得解决这个问题,要将系统自上而下分层,请求数量从上往下 要呈漏斗状,从前端开始不要用户一直点击就一直请求后台,动静分离,静态资源可以单独搞个服务器, 后台先查缓存,查到了直接返回,也可以将请求存再队列中,一个个顺序执行,最后才访问数据库。

22.什么情况下会内存溢出,什么情况下会内存泄漏,怎么解决?

内存溢出指程序在申请内存,没有足够的内存供其使用,出现 out of memory ;

内存泄漏是指程序在申请内存后,无法释放已申请的内存空间。(我主要觉得一些静态的引用会产生内存泄漏,比如静态的list中放了一些没用的对象)

23.我们为什么要统一生成id, 不用数据库自增的id

我们系统没分库,本来是可以用数据库自增的id,但以后可能会分库,方便扩展。

24.mybatis 可以延迟加载吗

在真正使用数据的时候才发起查询,不用的时候不查询关联的数据,延迟加载又叫按需查询(懒加载)

<collection property="accountList" ofType="com.example.domain.Account" column="id" select="com.example.dao.AccountDao.findAllByUid"/>

25.抽象工厂设计模式

是围绕一个超级工厂创建其他工厂

主要解决接口选择的问题。

26.缓存击穿的问题

缓存击穿:就是略过缓存了,直接请求数据库,导致数据库挂了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值