面试题day23
小米
Java开发 一面
-
一个用户订单表,一个用户有可能多个订单,查询出每个用户的最新订单
-
Java 新建线程有哪几种方式
-
Java 内存区域,new出来的对象分配在哪里,堆内存里面是怎么划分的,为什么要分为新生代,老年代
方法区 堆
本地方法栈、虚拟机栈、程序计数器、直接内存
edon s1 s2 老年代
8 1 1 20
-
线程有哪些状态,阻塞状态和等待状态有什么区别
创建、就绪、运行、阻塞、终止
在进入synchronized方法之前因为抢不到锁对象而进入阻塞状态,进入阻塞队列。
进入到synchronized方法后由于调用了wait()方法而进入等待状态,此时进入等待队列,等待其它线程调用它的notify()方法将他唤醒。
-
数据库建立索引的原则,复合索引的命中规则
表的主键、外键必须有索引;
数据量超过300的表应该有索引;
经常与其他表进行连接的表,在连接字段上应该建立索引;
经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
索引应该建在选择性高的字段上;
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引
-
zookeeper 了解吗,节点类型
-
了解分布式服务吗,dubbo?
-
说下 spring 的 IOC 与 AOP
Spring IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的
Spring AOP 就是基于动态代理的
-
Java 反射有哪几种方式
- 全类名加载
Class<?> aClass1 = Class.forName("com.example.demo.Person"); - 类名.class
ClassaClass2 = Person.class; - 对象.getClass
Person jack = new Person("jack", 10);
Class<? extends Person> aClass3 = jack.getClass();
- 全类名加载
-
算法题:青蛙跳台阶,反转单链表
4399
Java一面
-
自我介绍+项目
-
Java的垃圾回收算法有哪几种?
复制、清除、整理
-
JVM内存区域划分?哪些是线程共享的,哪些是非线程共享的?
-
如果发生OOM的错误,有哪几种可能的原因?
堆 创建太多对象 jmap
栈 递归过多 jstack
方法区 jconsle
-
如何实现对一个单向链表进行局部反转?
-
MySQL主要的存储引擎?
-
MyISAM与InnoDB的区别?
是否支持行级锁 mvcc 外键 事务
-
InnoDB底层数据结构是哪种?
聚簇索引
-
知道平衡二叉树这个数据结构吗?如果一个有N个节点的平衡二叉树,深度是多少?
logn
-
聚簇索引与非聚簇索引?
-
SQL题:有一张表,记录了三个字段分别是学生、课程和成绩,计算出表里面课程总分超过300分的学生名单以及他们各自的总分
网易有道
9.3 一面 50min
-
判断字符串中是否有重复字符,用了set
-
快排非递归,不会,然后用递归写了
-
java集合
list set map
有序可重复、无需不可重复
-
多线程,jvm
-
springmvc 的一些常用注解的问题,获取参数的注解,RestController 和Controller的区别等等
@RequestMapping @RequestParam @RequestBody @PathVaribale @ModelAttribute
@RequestParam @RequestBody @PathVaribale
是否返回json
-
mybatis # $的区别
是否预编译
-
mysql相关的问题
-
redis的常用数据类型
list 压缩链表 双端列表
string 整型 简单动态字符串 embstr简单动态字符串
hash 哈希表 压缩链表
set 整型 哈希表
rset 跳表 压缩链表
渤海银行
-
介绍技术栈和项目;
-
类中静态变量和非静态变量在jvm中的存储;
实例变量,Java堆内存中
局部变量,方法中的栈帧中的局部变量表中
静态变量,存放在方法区内 -
对多线程了解吗;
-
大数据量的k-v怎么存到hashmap中;
- 第一个扩容的问题,主要还是要通过配置合理的容量大小和扩容因子,尽可能减少扩容事件的发生;
- 第二个锁资源的争夺,在put方法中会使用synchonized对头节点进行加锁,而锁本身也是分等级的,因此我们的主要思路就是尽可能的避免锁等级。所以,针对第二点,我们可以将数据通过通过ConcurrentHashMap的spread方法进行预处理,这样我们可以将存在hash冲突的数据放在一个组里面,每个组都使用单线程进行put操作,这样的话可以保证锁仅停留在偏向锁这个级别,不会升级,从而提升效率
-
二进制流对文件的处理;
创建一个FileOutputStream对象,使用它的构造方法传递文件的位置
此对象调用write方法,将数据写入到文件中;
数据写入完成后,释放资源。
-
使用springboot对数据库查询处理的过程;
三层架构、数据库
-
问有没有用sql往数据库导入过数据;
-
什么时候用try catch。