65°

互联网公司面试题汇总

1、jvm虚拟机:

2、mysql事务

3、复杂sql

4、数据量

5、kafka

6、集合源码 map 

7、有序map

8、锁

9、项目描述

10、java8新特性

11、线程池

12、有序map  LinkedHashMap

13、动态代理

14、对象类型的判断?

A:instanceof

15、Q:自定义注解 详见:https://www.cnblogs.com/dalaoyang/p/8657030.html

A:创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号

@Target是java的元注解(即修饰注解的注解),这里的@Target({METHOD,TYPE})指可以修饰方法、描述类、接口(包括注解类型) 或enum声明。

@Retention是java中的运行时注解,可以划分为三类

      1.RetentionPolicy.RUNTIME:注解不仅会被保存到class文件里,在jvm加载class文件之后仍然不会消失。

    2.RetentionPolicy.CLASS:注解会被保留到class文件里,但jvm加载class文件时被遗弃,默认的生命周期如此。

    3.RetentionPolicy.SOURCE:注解只会保留在源文件中,当java文件变异成class文件shi

@Inherited:允许子类继承父类的注解

@Documented:注解表明制作javadoc时,是否将注解信息加入文档。(添加时表示制作javadoc时将注解会加入其中)

自定义注解

@Documented @Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.METHOD})

public @interface Annotations {

long time() default -1;

}

16、Q:线程池 核心 最大线程数 达到核心之后如何创建 队列

A:https://www.cnblogs.com/waytobestcoder/p/5323130.html

17、Q:mysql数据库 隔离级别是多少

A:mysql 数据库的四种隔离级别

https://www.cnblogs.com/aiseek/p/8175849.html

1.READ UNCIMMITTED(未提交读) 

总结:这就是事务还没提交,而别的事务可以看到他其中修改的数据的后果,也就是脏读。

2.READ COMMITTED(提交读)

总结:这就是小华的事务执行到一半,而小明看不到他执行的操作,所以看到的是旧数据,也就是无效的数据

3.REPEATABLE READ(可重复读)

总结:虽然读取同一条数据可以保证一致性,但是却不能保证没有插入新的数据

4.SERIALIZABLE(可串行化)

18、合理创建索引 索引类型

Mysql目前主要有以下几种索引类型:普通索引、唯一索引、全文索引(FULLTEXT)、 单列索引、多列索引、组合索引

19、Q:查看sql有没有执行索引

A:possible_keys              

A在select窗口中,执行以下语句:

set profiling =1; -- 打开profile分析工具
show variables like '%profil%'; -- 查看是否生效
show processlist; -- 查看进程
use cmc; -- 选择数据库
show PROFILE all; -- 全部分析的类型
show index from t_log_account; ##查看某个表的索引
show index from t_car_copy; ##查看某个表的索引
-- 使用explain命令查看query语句的性能:
EXPLAIN select * from t_car_copy ; ##查看执行计划中的sql性能
EXPLAIN select * from t_car_copy where org_id = '3';
EXPLAIN select * from t_car_copy where 1=1 and org_id = '3';

20、Q:redis 默认端口号

A:6379

21、redis过期策略、过期数据(底层) 详见:https://blog.csdn.net/weixin_34292959/article/details/86364108

Redis三种Key过期策略

被动(惰性)删除、主动删除、maxmemory

22、Q:mybaties一级 二级缓存区别

A:一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的。

A:二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

23、开发mybaties插件技术

24、springboot启动流程

25、Q:分布式锁实现方式

A:基于数据库实现分布式锁;
基于缓存(Redis等)实现分布式锁;
基于Zookeeper实现分布式锁;

26、接口,抽象类

抽象类:   

1) 抽象方法,只有行为的概念,没有具体的行为实现。  使用:abstract 关键字修饰,并且没有方法体。  

2) 包含抽象方法的类,就一定是抽象类。  使用: abstract 关键字修饰,包含抽象方法。 3) 抽象类不能直接创建实例。可以定义引用变量。

4) 抽象类只能被继承,一个具体类继承一个抽象类,必须实 现所有抽象方法。

5) 抽象方法和抽象类非常适合作为系统的分析和设计的工具。

接口:

1 接口:全部的方法都是抽象方法,全部的属性都是常量。 接口用来表示纯抽象概念,没有任何具体的方法和属性。

2 不能实例化,可以定义变量。

3 接口变量可以引用具体实现类的实例。

4 接口只能被实现(继承),一个具体类实现接口,必须使用全部的 抽象方法。

5 接口之间可以继承。

6 一个具体类可以实现多个接口,实现多继承现象,表示:

7 接口中的属性,默认是常量 public static final

8 接中的方法一定是:public abstract

9 实现一个接口,使用关键字implements, 实现实际上是 一种继承关系。接口和实现类是父子类型的关系
27、多态

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。
28、arrayList底层AX_ARRAY_SIZE强转
29、arrayList和hasmap默认大小

10、16
30、SimDateFormat线程安全吗

不安全


31、spring aop原理

它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。

使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。


32、spring事务几种5 

spring事务: 
什么是事务: 
事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.

事务特性(4种): 
原子性 (atomicity):强调事务的不可分割. 
一致性 (consistency):事务的执行的前后数据的完整性保持一致. 
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰 
持久性(durability) :事务一旦结束,数据就持久到数据库

如果不考虑隔离性引发安全性问题: 
脏读 :一个事务读到了另一个事务的未提交的数据 
不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致. 
虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.解决读问题:

设置事务隔离级别(5种) 
DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 
未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生 
已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生 
可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生. 
串行化的 (serializable) :避免以上所有读问题. 
Mysql 默认:可重复读 
Oracle 默认:读已提交

33、spring ioc以及实现方式
34、mysql统计空列count 1  * 吗 单引号:在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。

Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数。比如我们看代码1所示,在Count中指定NULL(优化器不允许显式指定NULL,因此需要赋值给变量才能指定)。


35、左连接会走索引吗

不会

当你使用左连接的时候,数据库是从左到右按顺序全表扫描执行连接。 
内连接优化器会使用索引,使得查询速度提高


36、Java8垃圾回收机制

https://www.jianshu.com/p/db1d9235cc3b

标记-清除算法、复制算法、标记-整理、
37、描述秒杀系统设计,不用redis,高并发怎么处理
38、mysql行锁

https://blog.csdn.net/luzhensmart/article/details/81675527
39、单点登录设计
40、权限设计
41、离职原因

42、jvm内存模型、堆栈

43、集合、hasmap

44、线程池,参数

https://www.cnblogs.com/syp172654682/p/9383335.html

45、spring mvc注解

https://www.cnblogs.com/leskang/p/5445698.html

46、服务之间如何调用

47、es

48、redis

49、kafka多发、漏发

50、商品秒杀

51、spring cloud组件

52、支付

53、git命令

54、分布式事务

56、redis基本数据类型

57、springboot启动类注解

58、mybaties # $区别 mybatis动态order by使用$

59、线程什么周期

新建(New)、就绪(Runnable)、运

行(Running)、阻塞(Blocked)和死亡(Dead)五种状态

60、运行时和非运行时异常

 

本文由【一只小青蛙】发布于开源中国,原文链接:https://my.oschina.net/u/3915790/blog/3071865

全部评论: 0

    我有话说: