java面试题记录
11.27 实和智能
-
列出Spring里6个常用的注解?
这题看上去简单其实是间接的考察了,你到底用了多久的Spring…
@Component 标注在某个类上,以把这个类配置成一个bean
@Controller 用于控制层,把它标注在某个类上就说明Spring将会扫描到它作为控制器bean
@RequestMapping 用于控制层的方法前面,使前端有一个路径可以访问
@Service 用于业务层,把它标注到某个类上,说明这个类是业务层组件bean
@Repository 用于持久层DAO,把它标注在某个类上说明这个类是用于持久层数据访问bean
@Resource 给某个属性依赖注入,默认通过查找对应的bean的名字来注入
@Autowired 给某个属性依赖注入,默认通过查找对应的bean的类型来注入
@Transational 关于声明式事务管理,加在需要事务管理的方法上,就确保了这个方法里面的事务一致性,而且当事务失败的时候可以进行回滚。
扩展:SpringBoot里面有哪些常用的注解? -
@transactional注解能否用于所有的类, 抽象类,接口?
可以,一般用于类中public的方法上,不建议用于抽象类和接口,因为可能会不生效 -
json的两种结构是什么?
1、对象结构。和map差不多,里面包含了类似key,value的格式,key为名称,value为对应的值,然后外面再用大括号括起来。
{key:value, key:value,…}
2、数组结构:和数组差不多,里面包含了各种元素,外面用中括号括起来。
[element1,element2,element3,…]
两种结构相结合:
"users":[
{
"firstName":"firstname1",
"lastName":"lastname1",
"email":"email1"
},
{
"firstName":"firstname2",
"lastName":"lastname2",
"email":"email2"
},
{
"firstName":"firstname3",
"lastName":"lastname3",
"email":"email3"
}
]
- 语句Arrays.asList(2,3,4,5).forEach(System.out::print)可以输出正确的值吗?为什么?
答案是肯定的,这里面涉及三个知识点。
一个是Arrays的asList()方法,它是将数组转化成List,其中的参数必须是数组或是数组元素,但是它们必须是包装类类型,而不能是原生的基本数据类型,因为如果直接放入基本类型数组,他就会直接将整个数组对象当成一个元素输出。这里直接填元素2,3,4,5的话,每个元素就可以看成是包装类型的,因此可以正常输出。
第二个是List的forEach方法,它的作用是遍历一下list,但这里必须得用到lambda表达式来输出列表里的值,即:
list.forEach(i->System.out.print(i));
第三个就是方法引用,这个我在面试前从没见过…一上来给我搞懵了, System.out::print其实等价于i->System.out.print(i),是lambda表达式的简写,它是将一个方法来作为一个引用,来传给其他方法来使用,就有函数式编程的感觉。 - 数据库删除135开头的手机号的用户
delete from user where phone_number like “135%”
一些相关的模糊查询:
%: 表示0个或多个字符
_: 表示任意单个字符
[]: 表示括号中所列多个字符的一个字符
[^]: 表示括号中所列多个字符之外的一个字符 - 数据库查询所有课程分数都是80分及以上的学生
例如:
| student_name | module | mark |
|zhangsan| chinese | 85 |
|zhangsan| math | 79 |
|lisi| chinese | 82 |
|lisi| math | 88 |
|wangwu| chinese | 93|
|wangwu| math | 85 |
|wangwu| english | 81 |
select student_name from student where student.student_name not in (select student_name from student where mark<80)
思路:先使用子查询查出小于80分的学生姓名,再查出所有学生姓名,最后使用not in即可排除掉小于80分的了,即80分及以上的学生。
11.26 EA sports外包
-
list 和set的区别?
list 可以放重复元素,set不能放重复元素。
list 是有序的,放进去的元素可以按顺序取出,set不行。
set只能有一个null 而list可以有多个null, -
什么是一致性哈希?
这个太大了,得慢慢学,以后再补
它的性质和java哈希表里面的哈希算法差不多,但是普通的哈希取模太小了,我们如果按照哈希算法来插入记录到数据库中,那么每当新增数据库的时候,就必须修改哈希算法,消耗大量的资源。因此, -
tomcat怎么配置?
修改端口:打开conf/server.xmlxml <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>
部署:直接把Web项目放在webapps下,Tomcat会自动将其部署
conf/server.xml里面修改连接数,关闭客户端dns查询也能进行优化 -
怎么检测是哪个线程发生了死锁?
我们可以使用JDK里面自带的Jstack工具。先获取到java程序的进程id,然后输入命令jstack -l 进程id 可以将线程信息输出到文件,最后分析文件即可找出哪里发生了死锁。 -
JavaScript中== 和 === 的区别?
= =代表相等,= = =代表恒等,就是说===的更加严格一些
三个等于号的只有两边类型相等,且内容相等,才返回true,否则返回false
两个等于号的,若是类型相等,则比较内容,若是类型不相等,js会将两边的内容转换为数值类型,再进行比较。 -
有没有用过集群?
需要用到redis,zookeeper等,得慢慢学,以后再补 -
为什么java里面的泛型是伪泛型?
我当时听他说就愣住了,泛型是伪泛型?然后百度搜了一下还真是这样。因为java的泛型只是相当于在编译的时候作一个提示,阻止我们放进去其他类型的元素,可是如果我们使用反射机制,真的可以放进去各种各样的元素,此时泛型就失效了。
之前初学java必会的基础面试题
-
java的八大变量?
byte, short, int, long, float, double, char, boolean -
HashMap的线程安全?
HashMap并不是线程安全的,主要是因为当两个线程同时往一个hashMap里面添加元素,都需要扩容的时候,即调用resize方法时,其中的rehash方法在并行情况下可能会出现环形链表,程序出现死循环。我们可以使用ConcurrentHashMap来保证线程安全。 -
StringBuilder和StringBuffer的区别?
StringBuilder并非线程安全,因此在单线程的情况下效率更高,StringBuffer恰好相反。 -
一条sql查出两个表中不同的数据?
这时候要使用全外连接,可以查出两个表不同的数据:full join
例如: select * from user as a full join stu as b on a.name = b.name -
什么是hash碰撞?
如果某两个元素计算出的hash值一样,那么这两个元素就发生了hash碰撞,处理hash碰撞一般有两种方法:开放寻址法和链接法。开放寻址法就是,插入时如果这个地址满了,就继续探查下一个地址,直到有一个地址可以放进去为止。链接法就是,把所有地址都链接一个链表,这样哈希值在同个地址上的元素就可以加到链表里,解决了冲突。 -
HashMap如何解决hash碰撞?
HashMap是使用链接法解决hash碰撞的,若是插入的两个元素的hash值相同,则按照实际情况,将元素插入到该地址链接的链表或红黑树中。 -
Mysql的四种事务隔离级别?
1.read-uncommitted
2.read-committed
3.repeatable-read
4.serializable -
高并发如何解决?
-
Spring bean作用域?
-
MySQL的链接查询、如何去重?
-
Mybatis # $的区别?
-
唯一索引和主键索引的区别?
-
抽象类和接口的区别?
本文地址:https://blog.csdn.net/kagamkuro/article/details/110232947
上一篇: 深度复盘阿里、字节跳动、美团、腾讯、小米等名企高频面试专题,大厂面试真不难
下一篇: U支付