开发者社区 问答 正文

上周一去一家公司面试碰到的一些题目 热:报错

1.System.out.println(Integer.MAX_VALUE+1);的输出是多少?
2.HashMap和HashTable的区别?
3.如何写一个线程,如何在线程中控制同步?
4.有数组A,数组B,B中的元素A中都有,如何将A中有,B中没有的元素放入数组C中?
5.如何用最简短的代码以金字塔的形式显示输出100以内的数字,
6.一个文件正在写时如何保证实时读取并且保证无重复读取和漏读?
7.一个4kw行的文本文件,如何快速查重并排序
8.在遍历一个list时,要对其中的一个对象做修改,如何做能保证不出错?
9.在服务器端编程用到过queue吗?为什么要用queue(queue的实现方式及工作原理)?
10.servlet的工作原理?servlet和java bean有什么区别?
11.jvm的工作原理?jvm启动时加载类的顺序,它们分别做什么了? java中的几种引用类型及区别
12.java的垃圾回收机制决定了它不能够及时地释放对象,但是我们的编程可以促进它进行释放.
   列出你知道的所有能够促进垃圾回收的方法和技巧.有实际应用的技巧请详细阐述.
13.如何删除数据库里id不同,但其它字段相同的记录.
14.假如要往数据库里一个blob字段写数据,一个字段里数据量很大(100M+),如何做能保证正常读取且高效?
15.一个web server当机的时候,如果顺序快速地排查问题?
16.如何调优tomcat,mysql?tomcat里的运行参数根据什么去调整?如何调
17.如何提高系统的并发访问量?你在以前系统设计中是如何做的?
18.架构项目时如何设计(硬件,技术选型,用户访问量,并发访问量)如果给你一个注册用户500万,日pv100w的系统,你如何去设计?
19.如何去优化一个系统?说说你的一些经验

展开
收起
kun坤 2020-06-08 11:05:42 634 分享 版权
阿里云 AI 助理回答

这些问题涉及Java编程、数据结构、多线程、文件操作、数据库管理、Web服务器优化、系统设计与架构等多个方面。虽然我基于阿里云产品知识,但我会尽量结合这些领域的一般性知识来回答你的问题。

  1. System.out.println(Integer.MAX_VALUE + 1); 的输出会是一个负数,因为整型溢出,Integer.MAX_VALUE 是 Java 中 int 类型的最大值,加 1 后会回绕到最小负数。

  2. HashMap和HashTable的区别:

    • 线程安全性:HashTable 是线程安全的,而 HashMap 不是。HashTable 在方法中使用了 synchronized 关键字。
    • 效率:由于线程安全的同步机制,HashTable 相对较慢。
    • 允许 null 值:HashMap 允许 key 和 value 为 null,而 HashTable 不允许。
  3. 如何写一个线程及控制同步:

    • 创建线程可以通过继承 Thread 类或实现 Runnable 接口。
    • 控制同步可以使用 synchronized 关键字修饰方法或代码块,或者使用 ReentrantLock 等锁。
  4. 数组去重:

    List<Integer> listA = Arrays.asList(Arrays.stream(A).boxed().toArray(Integer[]::new));
    List<Integer> listB = Arrays.asList(Arrays.stream(B).boxed().toArray(Integer[]::new));
    List<Integer> listC = listA.stream().filter(e -> !listB.contains(e)).collect(Collectors.toList());
    
  5. 金字塔形式输出数字:

    for (int i = 1; i <= 10; i++) {
       for (int j = 10; j > i; j--) {
           System.out.print(" ");
       }
       for (int k = 1; k <= (i * 2) - 1; k++) {
           System.out.print(i);
       }
       System.out.println();
    }
    
  6. 实时读取文件且无重复读取和漏读: 可以考虑使用文件锁(如 Java NIO 中的 FileChannel.lock())确保读取时不会被其他进程干扰,并使用循环检查文件状态或监听文件变化。

  7. 快速查重并排序大文本文件: 使用哈希集合(HashSet)进行查重,然后将结果导出到新文件,最后使用排序算法或工具(如 Unix 的 sort 命令)排序。

  8. 遍历List修改对象: 使用迭代器(Iterator)遍历,调用其 remove() 方法安全移除元素,或直接创建一个新的列表存放修改后的对象。

  9. Queue的应用场景及原理: Queue常用于实现生产者-消费者模型,保证线程间的数据传递。Java中的ArrayBlockingQueueLinkedBlockingQueue等实现了阻塞队列,通过内部锁机制控制并发访问。

  10. Servlet工作原理: Servlet是运行在服务器端的小程序,接收HTTP请求,生成响应。它由Web容器(如Tomcat)管理,生命周期由容器控制。JavaBean是简单的可复用组件,通常用于封装数据。

  11. JVM工作原理: JVM加载类时经历加载、验证、准备、解析、初始化五个阶段。引用类型包括强引用、软引用、弱引用、虚引用,它们影响垃圾回收时机和方式。

  12. 促进垃圾回收的方法:

    • 尽量减少长生命周期对象持有短生命周期对象的引用。
    • 使用弱引用、软引用等降低对象的引用强度。
    • 显式调用 System.gc() 虽不推荐,但在某些情况下可能有帮助。
    • 使用 WeakReferencePhantomReference 结合引用队列及时清理不再使用的对象。
  13. 删除数据库中重复记录: 使用SQL语句,例如 DELETE FROM table WHERE id NOT IN (SELECT MIN(id) FROM table GROUP BY other_columns)

  14. 处理大Blob字段: 分块读写,避免一次性加载整个大对象到内存中。数据库层面可以设置合理的缓冲区大小,应用层使用流式处理。

  15. 排查Web服务器当机: 查看日志文件(如Tomcat的日志)、监控CPU、内存、磁盘使用情况,检查网络连接,分析堆栈跟踪,必要时使用JVM分析工具(如jstack, jmap)。

  16. Tomcat和MySQL调优:

    • Tomcat:调整JVM参数(如-Xms, -Xmx),配置连接池(如maxThreads, minSpareThreads),启用NIO或APR模式,禁用无用的服务。
    • MySQL:优化查询语句,合理使用索引,调整innodb_buffer_pool_size,根据负载调整连接池大小。
  17. 提高系统并发访问量:

    • 使用缓存(如Redis)减轻数据库压力。
    • 异步处理和消息队列减少同步等待。
    • 采用负载均衡技术分散请求。
    • 数据库读写分离,主从复制。
    • 代码层面优化,减少不必要的计算和资源占用。
  18. 项目架构设计:

    • 硬件:根据预计流量选择合适的服务器配置,考虑冗余备份。
    • 技术选型:微服务架构(如Spring Cloud)、分布式数据库、CDN加速。
    • 用户访问量与并发量:评估后选择高性能中间件,如高性能数据库、消息队列、负载均衡器。
    • 对于500万注册用户,日PV100万的系统,建议采用分布式部署,利用云服务弹性伸缩能力,确保高可用性和扩展性。
  19. 系统优化经验:

    • 性能监控:持续监控系统性能指标,定位瓶颈。
    • 数据库优化:定期分析和优化表结构,索引策略。
    • 代码重构:去除冗余代码,提升执行效率。
    • 并发控制:合理使用锁机制,避免死锁。
    • 利用云服务:利用云平台提供的自动扩展、数据库服务等,减少运维负担,提高稳定性。
有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答