1、Linux命令,搜索关键字命令?
grep-i “关键字”文件名
2、Redis你知道的命令?
String:set /setnx/setex/get;
Hash:hSet/hsetnx/hget;
List:lpush/lpushnx;
Set:sadd/smove/spop;
ZSet:zadd/zscore
3、秒杀如何考虑的?如何实现的?
限流:鉴于只有少数用户秒杀成功,所以限制大部分流量,只允许少数部分流量进入服务后端;
削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购开始会很高瞬间峰值。所以利用缓存Redis和消息中间件ActiveMQ实现;
异步处理:秒杀是高并发系统,异步能更好的提高系统并发量;
内存缓存:秒杀系统最大的瓶颈就是对数据库的读写操作,可以利用缓存解决;
可扩展:为了支持高可用,高并发,更好的系统弹性扩展,如果流量增加,扩展机器就好了。
4.、多线程操作同一个HashMap一个读,一个写,线程安全吗?
HashMap是线程不安全的,可能会出现脏读
5、项目使用的设计模式?
自定义过滤器实现Filter
6、多线程传递参数,线程池的有哪些参数?如何使用多线程的?
两种方式:a.带参数的委托方法来传递;b.通过成员方法和带参数的构造方法传参
corePoolSize核心线程数
queueCapacity任务队列容量
maxPoolSize最大线程数
keepAliveSize线程空闲时间
allowCoreThreadTimeOut允许核心线程超时
rejectedExecutionHander任务拒绝处理器
继承Thread类
实现Runnable接口
实现Callable接口
通过线程池来创建异步线程
7、介绍一下锁?synchronize如何实现的?
公平锁/非公平锁
可重入锁
独享锁/共享锁
互斥锁/读写锁
乐观锁/悲观锁
分段锁
偏向锁/轻量级锁/重量级锁
自旋锁
monitorenter:每个对象有个监视锁monitor。当monitor被占用
时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下:每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下:1、如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者。
2、如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1.
3.如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor的所有权。
monitorexit:执行monitorexit的线程必须是objectref所对应的monitor的所有者。
指令执行时,monitor的进入数减1,如果减1后进入数为0,那线程退出monitor,不再是这个monitor的所有者。其他被这个monitor阻塞的线程可以尝试去获取这个 monitor 的所有权。
Synchronized的底层是通过一个monitor的对象来完成,其实wait/notify等方法也依赖于monitor对象,这就是为什么只有在同步的块或者方法中才能调用wait/notify等方法,否则会抛出java.lang.IllegalMonitorStateException的异常的原因。
8、项目哪些能证明你的工作能力?
表中每条记录对应配置的一个版本,条件查询页面要求显示最新版本的数据,刚开始是先查出最新版本List,在根据条件筛选出需要的数据,这样对于多渠道,多语言,多资源类型,多资源位,多操作系统,筛选组合条件复杂,查询sql过于复杂,于是新引入一个根据多渠道,多版本,主板本号,
最新版本的json:key拼接的最新的资源名,value最新版本的id,来解决这个问题。
9、写代码的bug多吗?
怎么提升代码质量?
a.根据业务需求,设计好功能实现逻辑后,总结可能出现bug的,避免bug
b.规范代码编写
c.代码审查
10、说说oop?
类和对象是面向对象的两个核心概念,类是对某一类事物的描述,对象是用来描述客观事物的一个实体,有一组属性和方法构成。面向对象有封装,继承,多态和抽象的特点
11、说说BIO和NIO?
BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
12、说说数据库有哪些索引?他们之间的区别?如何调优?
主键索引,唯一索引
索引与主键的主要区别有:
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度
数据库Sql执行时间优化:
a.缓存
b.sql避免全表扫描
c.加索引