中高级java研发面试题整理

mybatis:

1.#{}和${}的区别是什么?
#{} 使用预编译 ,防止sql注入
${} 通过字符串替换, 一般用于参数是表名、列名时

2.当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
① sql中给字段设置别名
②通过中设置别名

3.如何获取自动生成的(主)键值?
插入后标签返回 LAST_INSERT_ID

4 在mapper中如何传递多个参数?
①通过#{0}, #{1} 或者 @Params作为占位符
②通过map集合作为参数

5.动态sql是什么?有哪些动态sql?动态sql的原理?
①动态sql就是可以在xml配置文件中使用动态sql标签来实现逻辑判断和动态拼装sql

foreach

<select id="queryDataByIds" resultType="com.wang.test.demo.entity.User">
   select * from user where id in
    <foreach collection="list" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

if

<select id="queryDataBySearch" resultType="com.wang.test.demo.entity.User">
   select * from user
   where stage = 'A'
   <if test="age != null and age != ''">
       and age =#{age}
   </if>
   <if test="name != null and name != ''">
       and name =#{name}
   </if>
</select>

where

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu WHERE 
		<if test="age != null">
			age = #{age}
		</if> 
 		<if test="name!= null">
			AND name= #{name}
		</if> 
		<if test="class!= null">
			AND class = #{class}
		</if> 
</select>

choose、when、otherwise

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu WHERE age = #{age} 
	<choose>
 			 <when test="name != null">
    				AND name like #{name}
			</when>
			<when test="class != null">
					AND class like #{class}
			</when>
			<otherwise>
					AND class = 1
			</otherwise>
 	 </choose>
</select>

set
用于解决动态更新语句存在的符号问题

<update id="updateStu">
		Update tab_stu
		<set>
				<if test="name != null"> name=#{name},</if>
				<if test="age != null"> age=#{age},</if>
				<if test="class != null"> class=#{class},</if>
				<if test="subject != null"> subject=#{subject}</if>
		</set>
</update>

trim:
trim标签可实现where/set标签的功能;
Trim标签有4个属性,分别为prefix、suffix、prefixOverrides、suffixOverrides
prefix:表示在trim标签包裹的SQL前添加指定内容,在trim标签内sql语句加上前缀
suffix:表示在trim标签包裹的SQL末尾添加指定内容,在trim标签内sql语句加上后缀
prefixOverrides:指定去除多余的前缀内容,如:prefixOverrides=“AND”,去除trim标签内sql语句多余的前缀"AND"。
suffixOverrides:指定去除多余的后缀内容,suffixOverrides=“OR”,去除trim标签内sql语句多余的前缀"OR"

<update id="updateById" parameterType="com.wang.test.demo.entity.User">
   update user
    <set>
        <trim  suffixOverrides=",">
            <if test="name != null and age != ''">
                name=#{name},
            </if>
            <if test="age != null and name != ''">
                age=#{age},
            </if>
        </trim>
    </set>
    where id=#{id}
</update>
 
<update id="updateById1" parameterType="com.wang.test.demo.entity.User">
    update user
    <trim  suffixOverrides="," prefix="set">
        <if test="name != null and age != ''">
            name=#{name},
        </if>
        <if test="age != null and name != ''">
            age=#{age},
        </if>
    </trim>
    where id=#{id}
</update>

6. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
可以重复,只要namespace指定了不同的mapper

7 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
使用查询关联对象或者关联集合对象时,
Hibernate作为全自动ORM映射工具可以根据对象关系模型直接获取
mybatis需要手动写sql

java基础:

1. synchronized 和 lock 的区别是什么?
①synchronized 是关键字 ,Lock是一个接口
②synchronized会自动释放锁,不会产生死锁。Lock需要手动释放锁,可能产生死锁
2. sleep和wait的区别
①sleep是Thread中的方法, wait是Object的方法。
②sleep不会释放锁, wait会释放锁
3. 如何判断对象是否是垃圾
①没有实例 ② 没有引用 (可达性分析算法) ③没有ClassLoader
4. java中如何保证多线程的运行安全
①使用手动锁Lock
②使用线程安全的类
③使用synchronized关键字
④使用volatile关键字
5. ArrayList 的优缺点
底层以数组实现,尾部插入和中间查询快
但是在中间插入慢、删除慢
6. ArrayList与LinkedList有什么区别
①数据结构不同: ArraryList数组实现, LinkedList是链表
②效率不同: ArrayList适合顺序插入、随机读取, LinkedList适合随机插入删除,但是随机访问效率低
③自由性不同:ArrayList自由性低,需要手动设置固定大小的容量。
④主要开销的地方不同: ArrayList在于预留一定空间。LinkedList在于存储节点和指针信息
7. CAS
自旋锁,比较并交换、保证原子操作;通过volatile实现数据的可见性
CAS是非阻塞的、轻量级的乐观锁,利用 CPU 指令保证操作的原子性,以达到锁的效果,并且性能还很高;适合简单对象操作,比如布尔值、整型值;涉及多个共享变量时失效
8. servlet生命周期及方法调用过程
中高级java研发面试题整理_第1张图片

9 如何判断一个对象是否存活
GC 中一般通过可达性分析算法,判断GC Roots 下面的引用链中没有该对象的引用时,说明该对象不可用
可以作为GC Roots的有:①虚拟机栈中引用的对象 ②方法区类静态属性引用的对象 ③方法区常量池引用的对象
④本地方法栈JNI引用的对象
10 jvm内存模型
中高级java研发面试题整理_第2张图片

学习时间:

提示:这里可以添加计划学习的时间

例如:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习产出:

提示:这里统计学习计划的总量

例如:

  • 技术笔记 2 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个

你可能感兴趣的:(java,面试)