好小好小的公司,在龙口科技大厦那边面试,21楼好像,刚出电梯的时候看到隔壁的公司好有企业氛围,本以为也有几十号人,结果去到后办公区就类似一个客厅,好像也就十来个认,老板一个人在里面卧室大小的空间内办公。本着也是为了积累经验,不在意这些细节。

简单就是自我介绍,我简单地介绍自己会的一些技术框架,上家公司最近的一个项目情况给说出来,然后他就问了几个问题吧,我就写一些还记得的问题。

1、 数据库中重复数据怎么删除。

2、 线程中sleep和wait 的区别(一开始听到这个题目是蒙蔽的,居然有人会问这?)

3、 左连接右连接区别(幼稚题,感觉智商受到了侮辱)

4、 怎么做的SQL 优化

5、 静态方法是线程安全的吗

这个题目完全没想到会去问, 也蒙蔽了一会,后来想了想线程安全问题主要就是并发环境下对共享资源的操作会产生不确定性结果,缘由主要根据线程调用方法非原子性,导致对共享资源的操作过程中会被其他线程获取到中间变量的状态以及多线程环境下对共享变量的操作的指令被JVM优化导致指令重排而产生的可见性问题。

我就直接答因为静态方法依旧可以去调用静态成员,如果说静态方法有对成员的操作那就相当于多线程环境下存在对共享变量的操作,由于静态方法的执行非原子性,对共享变量的操作会被其他线程读取到中间状态,导致线程安全问题。

但是面试官直接就说成员是非线程安全,方法是线程安全的,反正我是懵逼了

6、 数据库层面如果说数据量很大,但是要操作DDL怎么办

7、 String、StringBuilder、StringBuffer 的区别(问烂又没卵用的面试题)

其他的想不起来了,就这几个吧,真就车程来回两小时,面试十分钟….

数据库中的重复数据那道题答得不是很好,第一印象以为是两条重复的数据,所以直接就说出Group By 的方案,对所有的除id外的字段做分组查询,然后having > 1, 再把查出来的数据根据id 删掉。

但是后面想想这种方案对于多个重复的数据删除就不友好,虽然也能删,就是分组后将字段聚合起来作为外查询的条件,面试官也提供了另外一种解决方案,就是通过表自连接的方式,where 除id外其他字段都相同的条件,就可以查询出所有重复的记录。但是个人觉得自关联查询的时间复杂度是O^2,效率不是很好

至于SQL 的优化,我直接就说索引了,其实本质上SQL 优化没什么好说的,走索引就对了,也没其他解决办法

发表评论

电子邮件地址不会被公开。 必填项已用*标注