海兴电力_java一面二面面经

海兴电力_java一面二面面经
最新回答
探春

2024-01-21 20:43:50

海兴电力Java一面二面面经总结一面核心问题及解答
  1. 数据的基本类型

    Java中数据类型分为两类:

    基本类型:包括byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、char(2字节)、boolean(未明确大小,通常为1字节)。

    引用类型:如类、接口、数组等,存储的是对象的内存地址。

  2. equals和==的区别

    ==:比较两个对象的内存地址是否相同(基本类型比较值,引用类型比较地址)。

    equals:默认比较地址(继承自Object类),但可被重写(如String类重写为比较字符序列)。需注意重写时需满足自反性、对称性、传递性。

  3. 线程的创建方式

    继承Thread类:重写run()方法,调用start()启动。

    实现Runnable接口:实现run()方法,通过Thread构造方法传入并启动。

    实现Callable接口:通过FutureTask和ExecutorService获取返回值。

    线程池:使用Executors工具类创建线程池(如newFixedThreadPool)。

  4. 并发和并行的区别

    并发:同一时间段内多个任务交替执行(单核CPU通过时间片切换实现)。

    并行:同一时刻多个任务同时执行(多核CPU的物理并行)。

  5. 如何避免线程的死锁

    破坏死锁条件

    互斥条件:无法避免(锁的本质)。

    占有且等待:一次性申请所有资源。

    非抢占:允许线程主动释放资源。

    循环等待:按固定顺序申请资源。

    使用工具类:如ReentrantLock的tryLock()设置超时时间。

  6. 线程加锁的方式

    synchronized:同步代码块或方法,基于JVM实现。

    ReentrantLock:需手动加锁/解锁,支持公平锁、超时等高级功能。

    读写锁(ReadWriteLock):读锁共享,写锁独占。

    CAS(Compare-And-Swap):无锁编程,通过原子操作实现。

  7. Java中的文件流有哪几种

    字节流:InputStream/OutputStream(如FileInputStream、ByteArrayOutputStream)。

    字符流:Reader/Writer(如FileReader、BufferedWriter),处理文本数据。

    缓冲流:BufferedInputStream/BufferedOutputStream,减少IO次数。

    转换流:InputStreamReader/OutputStreamWriter,字节流与字符流转换。

  8. Mybatis的#和$的区别

    #{}:预编译参数,防止SQL注入,自动添加引号(如WHERE name = #{name})。

    ${}:直接拼接SQL字符串,存在注入风险(如ORDER BY ${column})。

  9. 五张100万数据表的联合查询优化

    索引优化:为关联字段(如外键)添加索引。

    分页查询:避免全表扫描,使用LIMIT分页。

    减少数据量:通过WHERE条件过滤后再关联。

    读写分离:主库写,从库读。

    使用缓存:如Redis缓存热点数据。

  10. Tomcat服务器及系统层面的信息安全

    服务器层面

    防火墙配置:限制访问IP和端口。

    HTTPS加密:配置SSL证书。

    定期更新Tomcat版本,修复漏洞。

    系统层面

    输入验证:防止SQL注入、XSS攻击。

    权限控制:基于角色的访问控制(RBAC)。

    数据加密:敏感字段(如密码)使用AES或RSA加密。

  11. 异常类型及捕获方式

    异常类型

    Checked Exception:如IOException,需显式处理。

    Unchecked Exception:如NullPointerException,继承自RuntimeException。

    捕获方式

    try { // 可能抛出异常的代码} catch (Exception e) { // 处理异常} finally { // 无论是否异常都会执行(如关闭资源)}
  12. Redis的雪崩和击穿

    雪崩:大量键同时过期,导致请求直接打到数据库。解决方案:

    随机过期时间:避免批量过期。

    多级缓存:如本地缓存+Redis。

    击穿:单个热点键过期时被高并发访问。解决方案:

    互斥锁:更新缓存时加锁。

    逻辑过期:缓存数据设置逻辑过期时间,后台异步更新。

  13. Redis哨兵的作用

    监控:实时检查主从节点状态。

    自动故障转移:主节点故障时,从节点选举新主节点。

    通知:通过API或订阅频道通知客户端主从切换。

二面核心问题及解答
  1. MySQL的隔离级别

    读未提交(Read Uncommitted):可能读到未提交的数据(脏读)。

    读已提交(Read Committed):避免脏读,但可能不可重复读。

    可重复读(Repeatable Read):避免脏读和不可重复读(MySQL默认级别)。

    串行化(Serializable):最高隔离级别,避免幻读,但性能最低。

总结

海兴电力Java面试侧重基础(如多线程、JVM)、框架(Mybatis、Redis)和数据库优化,二面进一步考察数据库原理。建议结合项目经验深入理解技术细节,并熟悉常见问题的优化方案。