java后端工程师面试题(笔试):2022-11-04 经历(一)

本文是一份Java后端工程师的面试笔试题,涵盖了盒子模型、CSSdisplay属性、弹性盒子的flex-direction、原生JS操作DOM、数据库锁的类型、文件处理、HashMap与HashTable的区别、SpringAOP代理方式、事务传播行为以及Redis安全机制等技术知识点。

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

java后端工程师面试题(笔试):2022-11-04:

面试题:总分100

1、关于盒子模型(5分)
1)盒子模型的种类有几种?分别是什么?(1分)

2种,分别是1、W3C标准盒子模型   2、IE盒子模型

2) 容器中使用display属性有几种值?都是什么意思?(2分)

display:none:设置元素不会被显示
display:block:设置元素默认值,元素会被显示为块级元素,该元素前后带有
换行符。
display:inline:内联元素的默认值,元素会被显示为内联元素,该元素前后没
有换行符。
display:inline-block:行内块元素,既有内联元素的特性,又有块元素的特性

3) 弹性盒子属性flex-direction的值有几种?都是什么意思?(2分)

4种

row :	默认值是row,主轴为水平方向,从左到右排列
row-reverse:  	主轴为水平方向,从右到左排列
column: 	主轴为垂直方向,从上到下排列
column-reverse: 	主轴为垂直方向,从下到上排列

2、<div><span>1</span><span>2</span><span>3</span></div>如何使用原生JS让第二个span 的内容变为红色?

3、数据库中的锁包括什么(5分)

按锁的粒度划分:表级锁、行级锁、页级锁
按锁级别划分:共享锁、排它锁、意向锁
按加锁方式划分:自动锁、显示锁
按使用方式划分:乐观锁、悲观锁

4、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替输出到c中(5分)

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class MainClass{
    public static void main(String[] args) throws Exception{
        
        // 用字符流读取a和b文件内容。
        FileManager a = new FileManager("a.txt",new char[]{'\n'});
        FileManager b = new FileManager("b.txt",new char[]{'\n',' '});    
        
        // 创建字符输出流类对象和已存在的文件相关联。文件不存在的话,并创建。
        FileWriter c = new FileWriter("c.txt");
        
        String aWord = null;
        String bWord = null;
        
        while((aWord = a.nextWord()) !=null ){
            c.write(aWord + "\n");//写入字符串。
            bWord = b.nextWord();
            if(bWord != null)
                c.write(bWord + "\n");
        }
        
        // 当b的长度大于a的长度,继续写入b的内容
        while((bWord = b.nextWord()) != null){
            c.write(bWord + "\n");
        }    
        c.close();
    }
    
}


class FileManager{

    String[] words = null;
    int pos = 0;
    
    public FileManager(String filename,char[] seperators) throws Exception{
        
        // 表当前目录
        File f = new File(filename);
        
        //创建读取字符数据的流对象,读取路径不正确时会抛 IOException ,用以读取流对象关联一个已存在文件。
        FileReader reader = new FileReader(f);
        
        char[] buf = new char[(int)f.length()];
        
        //将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1。
        int len = reader.read(buf);
        
        // new一个string对象,取值从0开始,长度为len,取的是buf数组的值。
        String results = new String(buf,0,len);
        String regex = null;
        
        if(seperators.length >1 ){
            regex = "" + seperators[0] + "|" + seperators[1];
        }else{
            regex = "" + seperators[0];
        }
        words = results.split(regex);
    }
    
    public String nextWord(){
        if(pos == words.length)
            return null;
        return words[pos++];
    }

}

5、给你一组学符串如: 7i8hy4jjnb2.让你编程输出里面的数字7842(5分)

public class FilterChar {
public static void main(String[] args) {
   String   s   =   "iu7i8hy4jnb2";
   String newStr = s.replaceAll("[a-z]", "");
   System.out.println(newStr);
  }
}

6、HashMap和 HashTable的区别(10分)

HashMap是非线程安全的,Hashtable是线程安全的。

HashMap要比Hashtable效率高。

初始容量大小和每次扩充容量大小的不同 :Hashtable默认的初始值为11,
每次扩容后,容量变为原来的2n+1倍.初始化大小为16,每次扩容后变为原来的2倍

7、请写出遍历HashMap<String,0bject>的代码(5分)

public static void main(String[] args){
  Map<String,String> map = new HashMap<String,String>;
  map.put("小明","小红");
  map.put("小白","小青");
//因为HashMap的底层是由多个entry组成的,所以使用entry来接map.entrySet()
  for(Map.Entry<String,String> entry : map.entrySet()){
    //这里就可以打印对应的key和value
    System.out.println("方法一对应的key:"+entry .getKey()+"值"+entry.getValue());
  }

8、spring的两种代理JDK和CGLIB的区别(5分)

1、
JDK代理使用的是反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
CGLIB代理使用字节码处理框架ASM,对代理对象类的class文件加载进来,通过修改字节码生成子类。
2、
JDK创建代理对象效率较高,执行效率较低;
CGLIB创建代理对象效率较低,执行效率高。
3、
JDK动态代理机制是委托机制,只能对实现接口的类生成代理,通过反射动态实现接口类;
CGLIB则使用的继承机制,针对类实现代理,被代理类和代理类是继承关系,所以代理类是可以赋值给被代理类的,因为是继承机制,不能代理final修饰的类。

9、简述 spring 创建Bean的生命周期?(10分)

在这里插入图片描述
在这里插入图片描述

10、Mybatis修改一个对象时,部分字段为空时不修改,怎么编写SQL语句(动态SQL语句)(5分)

<update id="updateUser" parameterType="User">
  UPDATE user SET
    <if test="username != null">username=#{username},</if>
    <if test="password != null">password=#{password},</if>
    <if test="email != null">email=#{email},</if>
    <if test="phone != null">phone=#{phone},</if>
    <if test="address != null">address=#{address},</if>
  WHERE id=#{id}
</update>

11、SpringAOP代理中有几种方式,分别是什么,有什么特点?(10分)

两种代理模式

一种是jdk动态代理,另外一种是cglib代理。

JDK动态代理是JDK原生的,不需要任何依赖即可使用

使用CGLib代理的类,不需要实现接口,因为CGLib生成的代理类是直接继承自需
要被代理的类;

12、什么叫事务传播行为? Spring支持几种事务传播行为?都是什么?(10分)

事务传播行为指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行.

7种:(required / supports / mandatory / requires_new /
 not supported / never / nested)

13、redis的安全机制(你们公司redis的安全这方面怎么考虑的?)(15分)
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖肖爱吃糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值