#

1.mysqldump:备份,还原,按条件导出,导入,导出表
2.mysqladmin:用于执行管理性操作

3. 关系数据库设计中,关系模式是用来记录用户数据的二维表

4.INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别

​ A INNER JOIN B:返回 A 和 B 中符合 on 条件式的记录

​ A LEFT JOIN B: 返回 A 中的所有记录和 B 中符合 on 条件式的记录

​ A RIGHT JOIN B:返回 B 中的所有记录和 A 中符合 on 条件式的记录

5.string:不可变字符序列,StringBuffer:可变字符序列,stringBuilder: 可变

6.Java:

  1. JDK、JRE、JVM 三者的关系,以及 JDK、JRE 包含的主要结构有哪些?

    JDK = JRE+java 的开发工具(java.exe\java.exe\javadoc.exe)

    JRD = JVM + java 的核心类库

  2. 为什么要配置 path 环境变量?如何配置?

    通过配置 path 环境变量,我们可以使某个程序,比如 javac.exe,在任意目录下都可以运行,而不用跑到 javac 存在的目录下进行 dos 命令。

    JAVA_HOME=bin 的上一层目录

    path=%JAVA_HOME%\bin

  3. 小段代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package TestJava;
    import java.util.ArrayList;
    /*
    * @Author: jun
    * @Date:2022/11/5 13:24
    * @概述:
    */
    public class ArrayListTest {

    public static void main(String[] args) {
    ArrayList<String> s = new ArrayList<>();
    s.add("1");
    s.add("2");
    s.add("3");
    System.out.println(s);
    //ArrayList用get方法获取值
    System.out.println(s.get(1));
    }
    }

  4. 链表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package TestJava;
import java.util.ArrayList;
import java.util.LinkedList;

/*
* @Author: jun
* @Date:2022/11/5 13:24
* @概述:
*/
public class ArrayListTest {

public static void main(String[] args) {
ArrayList<String> s = new ArrayList<>();
s.add("1");
s.add("2");
s.add("3");
System.out.println(s);
//ArrayList用get方法获取值
System.out.println(s.get(1));

//插入的方法
s.add(1,"插入");
System.out.println("插入操作后:"+s);

//链表LikedList
LinkedList<String> ll = new LinkedList<>();
ll.add("12");
ll.add("12");
ll.add("12");
ll.add("12");
// foreach遍历链表
for (String i:ll
) {
System.out.println(i);
}
}
}

7. 两种参数

形参(形式参数)

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数

实参(实际参数)

函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为

实际参数

形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。

8.java 一个类可以实现多个接口;protected 成员在子类可见且可以修改;通过 super 可以调用父类构造函数;String 是不可修改的,且 java 运行环境中对 string 对象有一个对象池保存

9. 对访问修饰符作用范围的总结:

  • public 可以被当前类,子类,包,其他包,访问,
  • protected 可以被当前类,子类,包访问
  • default 可以被可以被当前类,包内访问;
  • private 只能被当前类访问

10.Map 接口有两个经典的实现:Hashtable 和 Hashmap;

Hashtable 线程安全,不支持 key 和 value 为空,key 不能重复,但 value 可以重复,不支持 key 和 value 为 null。

Hashmap 非线程安全,支持 key 和 value 为空,key 不能重复,但 value 可以重复,支持 key 和 value 为 null。

#

  1. 若要实现一个接口为普通类则必须实现接口的所有抽象方法

  2. 接口可以继承接口,并且可以继承多个接口,implement,但是类只允许单一继承。

1
2
3
4
5
6
7
8
9
10
11
import java.util.Date;  
public class SuperTest extends Date{
private static final long serialVersionUID = 1L;
private void test(){
System.out.println(super.getClass().getName());
}

public static void main(String[]args){
new SuperTest().test();
}
}

output:test.SuperTest

  1. 线程安全的类:
  • vector:就比 arraylist 多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用;
  • statck: 堆栈类,先进后出;
  • hashtable:比 hashmap 多个线程安全
  • enumeration:枚举,相当于迭代器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package TestJava;

/*
* @Author: jun
* @Date:2022/11/9 23:08
* @概述:
*/
public class StringTest {
public static void main(String[] args) {
String s1 = "coder";
String s2 = "coder";
String s3 = "coder" + s2;//是创建的对象,在堆中
String s4 = "coder" + "coder";//指向字符串常量池的对象
String s5 = s1 + s2;//也是指向字符串常量中对象
System.out.println(s3 == s4);
System.out.println(s3 == s5);
System.out.println(s4 == "codercoder");
System.out.println("s3:"+s3);
System.out.println("s5:"+s5);
System.out.println(s4 == s5);
}
}

output:

false
false
true
s3:codercoder
s5:codercoder
false

6. 还是一道编程题

1
2
String a="Hello";
String b=a.substring(0,2);

output:He

简记:前闭后开。

7. 检查型异常:

img

\1. 粉红色的是受检查的异常 (checked exceptions), 其必须被 try {} catch 语句块所捕获,或者在方法签名里通过 throws 子句声明。受检查的异常必须在编译时被捕捉处理,命名为 Checked Exception 是因为 Java 编译器要进行检查,Java 虚拟机也要进行检查,以确保这个规则得到遵守.

\2. 绿色的异常是运行时异常 (runtime exceptions), 需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被 0 除…

\3. 而声明为 Error 的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,Error 不需要捕捉。

8.static 修饰的语句或变量的特点是:

  1. 随着类的加载而加载
  2. 优先于对象存在
  3. 为所有的对象共享
  4. 可以使用类名调用,即类方法

attention:
静态方法只能访问静态成员
静态方法不能使用 this 和 super 关键字
主函数为静态函数

9.@Transactional 可以作用在类上,代表这个类的所有公共非静态方法都将启用事务。

10.SpringMVC 五大核心组件

  1. DispatcherServlet  请求入口

  2. HandlerMapping   请求派发,负责请求和控制器建立一一对应的关系

  3. Controller      处理器

  4. ModelAndView    封装模型信息和视图信息

  5. ViewResolver    视图处理器,定位页面

#

  1. 可以管理 Spring Bean 的生命周期的注解有:@PostContruct、@PreDestroy。

  2. @EnableAutoConfiguration 注解:

    • 该注解由组合注解 @SpringBootApplication 引入
    • 该注解作用是开启 SpringBoot 自动配置
    • 该注解会扫描各个 jar 包下的 spring.factories 文件,并加载文件中注册的 AutoCofiguration 类等
    • @EnableAutoConfiguration 的关键功能是通过 @Import 注解导入的 ImportSelector 来完成的
  3. String 类能不能被继承?

    不能,你查看源码会发现 String 类是被 final 修饰的类,final 修饰过的类不能被继承,final 修饰过的变量不能被修改。

  4. Spring 如何解决循环依赖?(高端面试题)

    spring 只能通过提前暴露 bean 来解决 setter 注入的循环依赖,无法解决构造器注入的循环依赖

  5. 简述 java 的反射机制和使用场景

    反射是 java 的一种机制,可以让我们在运行时获取类的信息,通过反射我们可以获取到类的所有信息,比如它的属性、构造器、方法、注解等(详细描述:https://blog.csdn.net/qq_33709582/article/details/113550163)

  6. String str = new String (“abc”) 到底 new 了几个对象?

    两种情况:

    • 一个:如果常量池中已经有 “abc" 这个字符串,也就是说你在前面已经 new 过一个值为”abc“的字符串,那虚拟机就只会在堆内存中 new 一个 String 对象,并将常量池中”abc“的地址指向你刚刚 new 的 String 对象。
    • 两个:如果常量池里面没有”abc" 这个字符串,那虚拟机就会在堆内存中 new 出一个 String 对象,还会在常量池中 new 一个 abc 字符串对象。
  7. mysql 深度分页查询如何写 sql 语句

    如果某天的一张单表数据量达到 500w 条,且你需要的数据恰恰在最后 10 条,常规的分页非常慢,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //常规分页
    SELECT * FROM table_name limit 1000000,10 //耗时3.968s

    //先查id ,写法很多,看个人习惯
    SELECT * FROM table_name a,(SELECT id FROM table_name limit 1000000,10) b WHERE a.id = b.id //耗时1.568

    //如果你的表有自增id(并且没断层),就这么写,效率直接起飞,真的是项目经理看了感动,架构师看了落泪
    SELECT * FROM table_name WHERE id>1000000 LIMIT 10 //耗时0.572
    //以上代码copy,没有实际在我自己的mysql中写过。
  8. 接口也能被继承,是被接口继承的接口。

  9. java 中的 sleep 和 wait 的区别

    1669565012569

    1.sleep 是 Thread 的方法,wait 是 Object 的方法

    2.sleep 方法没有释放锁,而 wait 方法释放了锁(上锁的方法没办法让多个线程同时操作一个数据,

    3.wait,notify 和 notifAll 只能在同步控制方法或者同步控制块里面使用,而 sleep 可以在任何地方使用。

    4.sleep 必须获取异常,而 wait,notify 和 notifyAll 不需要捕获异常。

  10. java 如何进行高效的数组拷贝?

    Arrays.copyOf 或 System.arraycopy,是自己 new 数组,然后 for 循环复制效率的两倍左右
    为什么快,因为它们是 native 方法;native 是包装其它语言编写的源程序


#

# java 中的 i++ 和 i–

i++ 每次会为变量分配一份新的内存

如下代码:

1
2
3
4
5
6
7
8
9
public class new02{
public static void main(String args[]){
int j =0 ;
for(int i =0 ; i<100;i++){
j = j++;
}
System.out.println("j = "+j);
}
}

结果是 j= 0

#