Java面试题

关于盒子模型

盒子模型的种类有几种?

标准盒子模型和IE盒子模型。

分别是什么?

标准盒子模型的尺寸由元素的内容区域(content)、内边距(padding)、边框(border)和外边距(margin)组成,内边距和边框都在内容区域之内。

IE盒子模型的尺寸由元素的内容区域(content+padding+border)和外边距(margin)组成,内边距和边框在内容区域之外。

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

容器中使用display属性的值有以下几种:

  1. block:将元素显示为块级元素,即独占一行,可以设置宽度、高度、边距等。
  2. inline:将元素显示为行内元素,即不独占一行,宽度、高度、边距等由内容决定。
  3. inline-block:将元素显示为行内块级元素,即既可以设置宽度、高度、边距等,也可以设置块级元素的特性。
  4. none:元素不会显示,不占用任何空间。
  5. table:将元素显示为表格,即可以设置宽度、高度、边距等,但不能设置浮动。
  6. table-row:将元素显示为表格行,即可以设置宽度、高度、边距等,但不能设置浮动。
  7. table-cell:将元素显示为表格单元格,即可以设置宽度、高度、边距等,但不能设置浮动。

这些值的作用是用来控制元素在页面上的位置和布局方式。

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

弹性盒子属性flex-direction的值有以下几种:

  1. row:水平方向排列,主轴为水平方向。
  2. row-reverse:水平方向倒序排列,主轴为水平方向。
  3. column:垂直方向排列,主轴为垂直方向。
  4. column-reverse:垂直方向倒序排列,主轴为垂直方向。

这些值的作用是用来控制弹性盒子中子元素的排列方式,主轴的方向决定了子元素的排列方向。

如何使用原生JS让第二个span呢内容变为红色

<div>
    <span>1</span>
    <span>2</span>
    <span>3</span>
</div>

请点击json按钮,查看语义结果!原生JS获取第二个span元素,并修改其样式属性color为红色。

const div = document.querySelector('div');
const span2 = div.querySelector('span:nth-child(2)');
span2.style.color = 'red';

解释:

  • 首先使用document.querySelector方法获取第一个div元素。
  • 然后使用:nth-child伪类选择第二个span元素。
  • 最后使用span.style.color修改其样式属性color为红色。

数据库中的锁包括什么?

数据库中的锁包括排它锁和共享锁,排它锁又称为写锁,共享锁又称为读锁。

排他锁(写锁)

排它锁是一种锁的类型,也称为写锁。当一个事务对一个数据对象加上排它锁时,它将阻止其他事务对该数据对象进行任何操作,直到该事务释放该锁。这意味着,排它锁可以防止其他事务修改或删除该数据对象,从而确保事务的一致性和完整性。

共享锁(读锁)

共享锁是一种锁的类型,也称为读锁。当一个事务对一个数据对象加上共享锁时,它将阻止其他事务对该数据对象进行任何操作,直到该事务释放该锁。这意味着,共享锁可以防止其他事务修改或删除该数据对象,但允许其他事务读取该数据对象。共享锁可以提高并发性能,因为它允许多个事务同时读取同一个数据对象,而不会互相干扰。

编写一个编程,将a.txt文件中的单词与b.txt文件中的单词交替输出到控制台

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.util.Arrays;

public class AlternateFileReader {

    public static void main(String[] args) {
        try (BufferedReader fileReaderA = new BufferedReader(new FileReader("a.txt"));
             BufferedReader fileReaderB = new BufferedReader(new FileReader("b.txt"))) {

            String line;
            String[] wordsA = new String[100];
            String[] wordsB = new String[100];

            // 读取文件中的单词到数组中
            while ((line = fileReaderA.readLine()) != null) {
                wordsA[line.length()] = line;
            }

            while ((line = fileReaderB.readLine()) != null) {
                wordsB[line.length()] = line;
            }

            // 使用Arrays.sort()函数对数组进行排序
            Arrays.sort(wordsA);
            Arrays.sort(wordsB);

            // 交替输出两个数组中的单词
            int indexA = 0;
            int indexB = 0;
            while (indexA < wordsA.length || indexB < wordsB.length) {
                if (indexA < wordsA.length && indexB < wordsB.length) {
                    System.out.print(wordsA[indexA] + " " + wordsB[indexB] + " ");
                } else if (indexA < wordsA.length) {
                    System.out.print(wordsA[indexA] + " ");
                } else if (indexB < wordsB.length) {
                    System.out.print(wordsB[indexB] + " ");
                }
                indexA++;
                indexB++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


给你一组字符串如:7i8hy4jjnb2.让你编程输出里面的数字:7842

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

HashMap和 HashTable的区别

HashMap和HashTable的区别在于HashMap是非线程安全的,而HashTable是线程安全的。此外,HashMap不保证映射的顺序,而HashTable保证映射的顺序。

请写出遍历HashMap<String,0bject>的代码

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());
  }

spring的两种代理JDK和CGLIB的区别

1、JDK代理使用的是反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
CGLIB代理使用字节码处理框架ASM,对代理对象类的class文件加载进来,通过修改字节码生成子类。

2、JDK创建代理对象效率较高,执行效率较低;
CGLIB创建代理对象效率较低,执行效率高。

3、JDK动态代理机制是委托机制,只能对实现接口的类生成代理,通过反射动态实现接口类;
CGLIB则使用的继承机制,针对类实现代理,被代理类和代理类是继承关系,所以代理类是可以赋值给被代理类的,因为是继承机制,不能代理final修饰的类。

简述 spring 创建Bean的生命周期

创建Bean的生命周期可以分为以下几个阶段:

  1. 实例化Bean:通过反射或者CGLib生成Bean的实例对象。
  2. Bean属性赋值:将Bean的属性值赋值给实例对象。
  3. Bean后置处理器初始化:Bean后置处理器可以对Bean进行一些初始化操作,比如数据源初始化、事务管理初始化等。
  4. Bean初始化前处理:Bean初始化前处理可以对Bean进行一些自定义的初始化操作,比如调用Bean的构造函数、初始化缓存等。
  5. Bean初始化:将Bean的属性值设置为指定值,比如将Bean的属性值设置为从数据库中获取的数据。
  6. Bean后置处理器处理:Bean后置处理器可以对Bean进行一些后置处理操作,比如数据源关闭、事务管理提交等。
  7. Bean销毁前处理:Bean销毁前处理可以对Bean进行一些自定义的销毁操作,比如释放资源、回滚事务等。
  8. Bean销毁:将Bean从内存中清除,释放资源。
  9. Bean后置处理器销毁:Bean后置处理器可以对Bean进行一些后置销毁操作,比如关闭资源、回滚事务等。

需要注意的是,Spring的Bean生命周期是可配置的,可以通过配置文件或者注解来控制Bean的生命周期。同时,Spring还提供了一些扩展点,可以通过扩展来实现自定义的Bean生命周期。

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

<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>

SpringAOP代理中有几种方式,分别是什么,有什么特点?

什么叫事务传播行为? Spring支持几种事务传播行为?都是什么

两种代理模式

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

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

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

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

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值