java开发面试题

数据库事务特性:原子性,一致性,隔离性,持久性
mysql引擎:innodb(写操作多用)和myisam(读操作多用,基本废弃)两种
redis:
Redis 和 Memcached 的区别:
Memcached是多线程,非阻塞IO复用的网络模型
Redis使用单线程的多路 IO 复用模型。
Redisson:加锁的lua脚本逻辑
缓存击穿/穿透/雪崩:
雪崩:大量的热点 key 设置了相同的过期时间,导致缓存在同一时刻全部失效,造成瞬时数据库请求量大、压力骤增
缓存击穿:某一个热点 key 设置了相同的过期时间,导致缓存在同一时刻全部失效,造成瞬时数据库请求量大、压力骤增
解决方案:加互斥锁
缓存穿透:访问一个缓存和数据库都不存在的 key

SpringMVC 常用的注解有哪些?
@Controller : 标注该类是控制器。
@RequestMapping:后面跟具体的url,用在方法上是该方法的具体路径,用在类上表示所有方法的父路径。
@RequestBody:接收体,将客户端请求过来的Json对象转成Java对象。
@ResponseBody:响应体,将Java对象转换成Json对象,并发送给客户端。
@PathVariable:用于获取URL中的参数,比如 ***.com/user/{id} 中ID的值。
@RestController:RESTful风格的新api,还有@GetMapping,@PostMapping,@PutMapping,@DeleteMapping等。
@RequestParam:当表单参数和方法形参不一致时,做一个名字的映射。

依赖注入有三种类型:
1.构造方法注入。2,geter:setter 方法。3,注解(@Autowired)

Spring 有几种配置方式?
基于 XML 的配置
基于注解的配置@override
基于 Java 的配置

你可以在 Spring 中注入一个 null 和一个空字符串吗?
可以

#{}和${}的区别是什么?
#{}是预编译处理,$ {}是字符串替换。
Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的set 方法来赋值; Mybatis 在处理$ {}时,就是把${}替换成变量的值。
使用#{}可以有效的防止 SQL 注入,提高系统安全性

最佳实践中,通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个Dao 接口的工作原理是什么?
答:Dao的实现原理,是Mybatis框架通过JDK动态代理接口,当调用接口方法时,代理拦截调用,并通过接口全限名+方法名组成key的方式,查找XML映射文件中的MapperStatement,返回执行SQL后的结果

简述IP,Port,TCP的基本功能
IP代表网络位置
Port代表端口号
TCP网络通信的基本协议

简述Java网络编程究竟做些什么?
1.建立连接
2.准备输出的数据,流式输出
3.流式输入,编程业务需要的格式
4.关闭连接

创建线程的方式?
三种:
继承Thread类
实现Runnable接口
创建线程池

Runnable和Callable的区别?
Runnable接口中的run()方法的返回值是void
Callable接口中的call()方法是有返回值的

Thread类中的start()和run()方法有什么区别?
start()方法被用来启动新创建的线程,而且start()内部调用了run()方法

sleep() 方法和 wait() 方法区别?
释放锁:sleep 方法没有释放锁,而 wait 方法释放了锁 。
作用:Wait 通常被用于线程间通信,sleep 用于暂停执行。
苏醒:wait() 方法被调用后,线程不会自动苏醒
sleep() 方法执行完成后,线程会自动苏醒

volatile与synchronized区别?
volatile关键字能保证数据的可见性,但不能保证数据的原子性。synchronized关键字两者都能保证,也就是保证资源的同步。
volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。

同步的好处与弊端
好处:解决了线程的安全问题。
弊端:每次都有判断锁,降低了效率。
但是在安全与效率之间,首先考虑的是安全。

什么是线程死锁?如何避免死锁?
同时持有资源又同时申请资源。是指两个或两个以上的进程(或线程)在执行过程中,因争夺对方线程的资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

如何遍历 ArrayList 时移除一个元素?
foreach删除会导致快速失败问题,可以使用迭代器的 remove() 方法

Arraylist 与 LinkedList 区别?
ArrayList基于动态数组实现;LinkedList基于链表实现。
HashMap?
HashMap 使用数组+链表

HashSet、LinkedHashSet 和 TreeSet 的区别?
HashSet 是 Set 接口的主要实现类 ,HashSet 的底层是 HashMap,线程不安全的,可以存储 null 值;
LinkedHashSet 是 HashSet 的子类,能够按照添加的顺序遍历;
ConcurrentHashMap 和 Hashtable 的区别?
Hashtable通过使用synchronized修饰方法的方式来实现多线程同步,
ConcurrentHashMap采用了更细粒度的锁来提高在并发情况下的效率

线程有哪几种状态?
1、新建状态。2、就绪状态。3、运行状态。4、阻塞状态。5、死亡状态

假如新建T1、T2、T3三个线程,如何保证它们按顺序执行?
T3先执行,在T3的run中,调用t2.join,T2的run中,调用t1.join

mkdir 文件夹名称(创建目录)
tail -n[行数] -f[持续显示文件更新] 显示文件的末尾几行(默认10行))
pwd:显示当前目录
ls:显示所有文件
cd:进入某个文件
grep:查找指令  通常配合 ps -ef | grep 使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值