2024-01-21 20:43:50
数据的基本类型
Java中数据类型分为两类:
基本类型:包括byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、char(2字节)、boolean(未明确大小,通常为1字节)。
引用类型:如类、接口、数组等,存储的是对象的内存地址。
equals和==的区别
==:比较两个对象的内存地址是否相同(基本类型比较值,引用类型比较地址)。
equals:默认比较地址(继承自Object类),但可被重写(如String类重写为比较字符序列)。需注意重写时需满足自反性、对称性、传递性。
线程的创建方式
继承Thread类:重写run()方法,调用start()启动。
实现Runnable接口:实现run()方法,通过Thread构造方法传入并启动。
实现Callable接口:通过FutureTask和ExecutorService获取返回值。
线程池:使用Executors工具类创建线程池(如newFixedThreadPool)。
并发和并行的区别
并发:同一时间段内多个任务交替执行(单核CPU通过时间片切换实现)。
并行:同一时刻多个任务同时执行(多核CPU的物理并行)。
如何避免线程的死锁
破坏死锁条件:
互斥条件:无法避免(锁的本质)。
占有且等待:一次性申请所有资源。
非抢占:允许线程主动释放资源。
循环等待:按固定顺序申请资源。
使用工具类:如ReentrantLock的tryLock()设置超时时间。
线程加锁的方式
synchronized:同步代码块或方法,基于JVM实现。
ReentrantLock:需手动加锁/解锁,支持公平锁、超时等高级功能。
读写锁(ReadWriteLock):读锁共享,写锁独占。
CAS(Compare-And-Swap):无锁编程,通过原子操作实现。
Java中的文件流有哪几种
字节流:InputStream/OutputStream(如FileInputStream、ByteArrayOutputStream)。
字符流:Reader/Writer(如FileReader、BufferedWriter),处理文本数据。
缓冲流:BufferedInputStream/BufferedOutputStream,减少IO次数。
转换流:InputStreamReader/OutputStreamWriter,字节流与字符流转换。
Mybatis的#和$的区别
#{}:预编译参数,防止SQL注入,自动添加引号(如WHERE name = #{name})。
${}:直接拼接SQL字符串,存在注入风险(如ORDER BY ${column})。
五张100万数据表的联合查询优化
索引优化:为关联字段(如外键)添加索引。
分页查询:避免全表扫描,使用LIMIT分页。
减少数据量:通过WHERE条件过滤后再关联。
读写分离:主库写,从库读。
使用缓存:如Redis缓存热点数据。
Tomcat服务器及系统层面的信息安全
服务器层面:
防火墙配置:限制访问IP和端口。
HTTPS加密:配置SSL证书。
定期更新Tomcat版本,修复漏洞。
系统层面:
输入验证:防止SQL注入、XSS攻击。
权限控制:基于角色的访问控制(RBAC)。
数据加密:敏感字段(如密码)使用AES或RSA加密。
异常类型及捕获方式
异常类型:
Checked Exception:如IOException,需显式处理。
Unchecked Exception:如NullPointerException,继承自RuntimeException。
捕获方式:
try { // 可能抛出异常的代码} catch (Exception e) { // 处理异常} finally { // 无论是否异常都会执行(如关闭资源)}Redis的雪崩和击穿
雪崩:大量键同时过期,导致请求直接打到数据库。解决方案:
随机过期时间:避免批量过期。
多级缓存:如本地缓存+Redis。
击穿:单个热点键过期时被高并发访问。解决方案:
互斥锁:更新缓存时加锁。
逻辑过期:缓存数据设置逻辑过期时间,后台异步更新。
Redis哨兵的作用
监控:实时检查主从节点状态。
自动故障转移:主节点故障时,从节点选举新主节点。
通知:通过API或订阅频道通知客户端主从切换。
读未提交(Read Uncommitted):可能读到未提交的数据(脏读)。
读已提交(Read Committed):避免脏读,但可能不可重复读。
可重复读(Repeatable Read):避免脏读和不可重复读(MySQL默认级别)。
串行化(Serializable):最高隔离级别,避免幻读,但性能最低。
海兴电力Java面试侧重基础(如多线程、JVM)、框架(Mybatis、Redis)和数据库优化,二面进一步考察数据库原理。建议结合项目经验深入理解技术细节,并熟悉常见问题的优化方案。