一到三年工作经验java面试题

本文涵盖Java开发的基础知识,包括List、Set、Map等集合类的特点,MVC设计模式及其实现,String与StringBuffer的区别等内容。同时深入探讨了进阶话题如数据连接池、Hibernate状态管理及SQL优化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java开发基础篇

  1. List、Set、Map三个接口,存取元素时,各有什么特点?
  2. 请简述MVC的含义,并说明MVC处理的原理和哪些技术来实现?
  3. String和StringBuffer的区别。
  4. HashMap和HashTable的区别。
  5. HTTP协议中GET和POST的区别。
  6. update和saveOrUpdate的区别。
  7. 什么是spring?Spring有哪些优点?
  8. 写出一条sql语句实现下列查询表(t)

t表
查询结果所示:
查询后结果

  1. JDBC连接数据库的步骤。
  2. sql去重。
  3. 乱码的终极解决方式。
  4. cookie和session的区别。

java开发进阶篇

  1. 说说数据连接池的工作机制是什么。

  2. Hibernate有几种状态,这几种状态之间如何切换。

  3. 一条sql执行过长的时间,你如何优化。从哪些方面?web如何项目优化?

  4. 分布式、集群环境中,缓存如何刷新,如何保持同步?

  5. 你的接口服务数据被人截包了,你如何防止数据恶意提交?

  6. 一直蜗牛掉进10米深的井中,白天往上爬4米晚上又掉下去3米。请问要几天爬出来?

  7. 接口和抽象类的区别是什么?

  8. Web项目常见攻击方式,并说明如何防御攻击?

  9. Ajax如何解决跨域问题?

  10. 什么是低内聚和高耦合?封装原则又是什么意思?

  11. 关于tomcat的缓存。

  12. 关于设计模式的了解。

  13. 关于过滤器和拦截器在用户免登陆的安全设置。

  14. servlet生命周期和其工作机制。

  15. 关于mybatis的缓存。

  16. 关于项目中用到的事务管理,以及对事务的了解。

  17. 编写一个函数,求两个整型数组的交集中,最大的偶数。如果交集中不存在任何偶数,请使用你认为合理的方式通知此函数的调用者。例如:数组1为【1,2,3,4,5,6】,数组2为【10,8,6,4,2】,此方法应当返回6。
    参考函数定义:
    public int GetMaxEven(int[] array1,int[] array2)

  18. 请编写一个函数,按产品统计指定时间范围内的采购金额,可以使用任何一种你认为合理的数据结构进行输入和输出的描述。
    例如针对上述数据,获取2010-03-01至2010-07-31之间的数据,并且对相同产品数据进行统计。
    参考函数:public DataTable GetResult(DataTable orderTable,DataTime startDate,DateTime endDate)

  19. 请编写一个函数,实现从html到纯文本的转换。
    例如,输入内容为:
    i am alink

    Title Text


    应得到的结果为:
    i am a link
    Title Text
    参考函数定义:
    public string HtmlToText(String html)

  20. 请描述一下你曾经遇到过的比较棘手的程序编写或者设计方面的问题,并且你是如何解决的。

  21. 请列出几个你经常访问的同类型的几款手机app,并比较一下他们各自的优缺点。

<think>好的,用户需要寻找适合三年Java工作经验面试题。首先,我得回顾用户提供的引用内容,看看里面有没有相关的信息。引用1提到复习整个Java知识体系对面试成功率很重要,引用2和3涉及volatile、final、并发包中的类如AtomicInteger,以及内存屏障等内容。这些都属于Java多线程和并发的知识点,可能是重点考察的部分。 用户有三年经验,应该对基础有定掌握,所以面试题可能更偏向于进阶和实际应用。需要涵盖多线程、集合框架、JVM、设计模式、Spring框架、数据库优化等方面。此外,分布式系统、缓存、微服务相关的题目也可能出现,因为这些都是三年经验开发者常接触的内容。 接下来,我需要组织这些知识点,确保每个问题都有针对性,并且结合引用中的内容。比如volatile和AtomicInteger可以放在多线程部分,内存屏障和并发工具类如CyclicBarrier也需要提到。另外,引用中提到的不可变对象和final关键字也是重要的并发知识点,应该包含进去。 还要考虑用户可能需要的问题解答,比如如何回答volatile的作用,或者synchronized和ReentrantLock的区别。需要给出清晰的解释,并结合实际应用场景。例如,在单例模式中使用volatile防止指令重排序,或者使用线程池时如何选择参数。 此外,数据库优化方面,索引失效的场景需要具体例子,比如LIKE以通配符开头导致索引失效。JVM调优部分,需要提到常用参数和工具,如堆内存设置和MAT分析内存泄漏。Spring框架的问题要涉及核心组件、事务管理以及AOP的原理。 最后,要确保问题覆盖全面,并且符合国内面试的常见模式,比如源码分析、设计模式应用、系统设计能力等。同时,提醒用户结合项目经验准备实际案例,这样在回答时可以更具说服力。总结时强调深入理解原理和实际应用的重要性,帮助用户提升面试成功率。</think>### Java三年经验面试题重点解析 #### 、多线程与并发(核心考察点) 1. **volatile关键字** - 保证变量可见性(立即刷新主内存) - 禁止指令重排序(内存屏障实现) - 典型应用:双重检查锁单例模式中的`volatile`修饰符[^2] ```java public class Singleton { private static volatile Singleton instance; public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 2. **Atomic原子类** - 基于CAS(Compare And Swap)实现无锁编程 - `AtomicInteger`源码核心方法: ```java public final int getAndIncrement() { return unsafe.getAndAddInt(this, valueOffset, 1); } // Unsafe类底层实现 ``` 3. **线程池** - 参数选择公式:$$线程数 = CPU核心数 \times 期望CPU利用率 \times (1 + 等待时间/计算时间)$$ - 四种拒绝策略对比(AbortPolicy/CallerRunsPolicy等) #### 二、JVM底层原理 1. **内存模型** - 堆内存结构图示: ``` Young Generation(Eden+S0+S1) | Old Generation | Metaspace(JDK8+) ``` - G1收集器Region划分机制 2. **GC调优实战** - 常见参数示例: ```shell -Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ``` - MAT工具分析内存泄漏步骤 #### 三、Spring框架进阶 1. **循环依赖解决方案** - 三级缓存实现原理: ```java // DefaultSingletonBeanRegistry类 private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16); private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap<>(16); ``` 2. **事务传播机制** - PROPAGATION_REQUIRES_NEW实现原理: ```java // 会挂起当前事务,创建新事务 TransactionStatus newTx = beginNewTransaction(definition); ``` #### 四、数据库优化 1. **索引失效场景** - 计算公式:$$索引选择性 = \frac{不重复索引值}{总记录数}$$ - 案例:`WHERE LEFT(name,3) = 'abc'`导致无法使用索引 2. **分库分表方案** - ShardingSphere数据分片算法: ```java public class OrderShardingAlgorithm implements PreciseShardingAlgorithm<Long> { @Override public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) { // 根据order_id取模路由 } } ``` #### 五、分布式系统 1. **Redis分布式锁** - Redlock算法实现要点: ```lua if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1]) else return 0 end ``` 2. **熔断降级策略** - Sentinel规则配置示例: ```java DegradeRule rule = new DegradeRule("resName") .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) .setCount(50) .setTimeWindow(60); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值