欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

杂七杂八整理(随笔1)

程序员文章站 2022-05-27 13:45:54
...

杂七杂八整理(随笔1)

杂七杂八整理(随笔1)

10.tomcat服务器在访问量大或者时间长时变得比较卡,如何定位该问题

1.首先查看tomcat的日志问题catalina.out   error.log   gc.log

2.其次查看内存占用情况,查看是否有线程死锁现象。

redis:

1.常用的数据结构,特性,应用场景

  String  java中的字符串  用于缓存简单类型的数据

  set    无序 唯一        可以用set无序特性开发抽奖功能

  zset   有序 唯一        zset根据double类型的分数进行排序,用于排行榜等

  hash   key-value        根据hash值的特性,根据key值方便的获取value值

  list     类似于java中的linkedList   有序,不唯一

                          可以根据数据存放的先后进行排序,

2.持久化的机制

1)rdb快照的方式

save 900 1              #900(15分钟)之后,如果至少有1key发生变化,则dump内存快照。

2)aof 每次写操作都会记录到aof中,或者是每秒同步一次。

3.瓶颈

1)机器内存大小,因为redis的数据放在内存里,所以存放数据量的多少取决于内存的多少

2)Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

3)单点故障

4)主从复制

解决办法:

总结:

1.Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。

2.如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

3.为了主从复制的速度和连接的稳定性,SlaveMaster最好在同一个局域网内。

4.尽量避免在压力较大的主库上增加从库

5.为了Master的稳定性,主从复制不要用图状结构,用单向链表结构更稳定,即主从关系为:Master<--Slave1<--Slave2<--Slave3.......,这样的结构也方便解决单点故障问题,实现SlaveMaster的替换,也即,如果Master挂了,可以立马启用Slave1Master,其他不变。

1.equals和==比较:

杂七杂八整理(随笔1)

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

1、比较的是操作符两端的操作数是否是同一个对象。

2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。

3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:

int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

1.类变量和实例变量的区别:类方法和实例方法的区别:
(1)类变量和类方法都使用static修饰
(2)类变量和类方法都可以使用 类名.xxx的形式调用
(3)类变量和类方法都是和类同时加载的   实例变量和实例方法和对象同时加载的
(4)类变量和类方法只有一份   实例变量和实例方法每个对象各自有一份
(5)内存存在的位置不同 ,类变量存在于静态域中,实例变量存在堆内存

2.属性赋值的前后顺序
默认初始化 --> 初始化赋值(代码块)-->构造器-->setter方法
3.静态方法中可以出现this 和super 关键字吗? 为什么?
不可以。 静态方法是和类同时加载的,this和super是创建对象时或创建对象后才出现的
4.static的用法:
静态可以调用静态
静态不可调用非静态
非静态可以调用静态
非静态可以调用非静态
注:静态的东西都是随着类加载而加载的。

5.什么是单例模式?
一个类只拥有一个对象
6.java中有多少种设计模式?
23
7.饿汉式和懒汉式区别
(1)饿汉式创建对象时,初始化并赋值.懒汉式创建对象时,先初始化对象引用,调用方法时 在赋值。
(2)饿汉式安全  懒汉式不安全

8。书写单例模式的步骤?
  饿汉式:(1)私有化构造器
  (2)私有化创建对象并赋值
  (3)对外提供访问对象的方法
  懒汉式:(不安全的)
  (1)私有化构造器
  (2)私有化创建对象的引用设为null
  (3)对外提供访问对象的方法,判断调方法的对象是否为null,如果为null,为其 创建对象,如果不为null直接return

9.equals() 和 == 的区别?
 equals():只能处理引用类型变量,比较的是内容.
 == :一般比较基本数据类型,比较的是值,比较引用数据类型是比较的是首地址值

10.object中的equals() 和 == 的区别?
      没区别!!
11.toString方法的用法(什么是toString方法):
    以字符串的形式打印对象信息: 包名+类名aaa@qq.com+哈希码
    重写以后的toString() 通常打印对象的所有属性信息

12.八个基本数据类型所对应的包装类:
byte short   int long float double boolean   char
Byte Short Integer Long Float Double Boolean Character

13.什么是装箱?什么是拆箱?
装箱:基本数据类型包装成包装类的实例
拆箱:获得包装类对象中包装的基本类型变量
JDK5.0之后,支持自动装箱,自动拆箱。但类型必须匹配。


14.int 类型转String类型怎么转?
调用String类中的valueOf()方法。

15.String类型怎么转int类型?
调用Integer类中的praseInt()方法。
16.什么是静态代码块?
用static 修饰的代码块
17.final 和finally的区别?
final标记的类不能被继承。
final标记的方法不能被子类重写。
final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
finally常与try{}catch(){}一起使用,finally代码块中的代码一定会被执行

18.什么是抽象类?
有时将一个父类设计得非常抽象,以至于它没有具体的实例,使用abstract修饰的类叫做抽象类。
19.什么是抽象方法?
用abstract来修饰一个方法时,该方法没有具体的方法体,这样的方法叫做抽象方法。
20.抽象类中必须有抽象方法么?
不一定,可以有普通的方法。
21.抽象方法所在的类一定是抽象类么?
一定,含有抽象方法的类一定是抽象类。
22.抽象类可以被实例化吗?
不可以。
23.抽象类有构造器么?
有。
24.可以使用abstract关键字修饰属性么?
不能
25.可以使用abstract关键字修饰构造器么?
不可以
26.抽象方法可以被final修饰么?
不能
27.abstract 可以和private一起使用么?
不可以
28.什么是接口?
接口(Interface)是Java所提供的另一种重要功能,它的结构与抽象类非常相似。接口本身只存 在静态常量与抽象方法。使用interface来定义。
29.接口中可以存在哪些成员?
 常量,抽象方法,普通方法
30.接口中可以存在构造器吗?
不可以
31.接口中可以存在代码块么?
不可以
32.接口中定义了如下变量:
int a = 1; 那么它是什么变量?静态常量
33.接口中定义了如下方法:
void add();那么它是什么方法?抽象方法
34.接口的继承机制是怎么样的?
接口采用多继承,一个接口可以继承多个接口,使用extends关键字,被继承的接口之间用
“,” 隔开。

35.类和接口之间的关系是怎样的?
类实现接口,一个类可以实现多个接口,使用implement关键字,多个接口之间用“,” 隔开 。
36.如果一个类实现了一个接口没有重写接口中的抽象方法那么这个类是?
是抽象类。
37.当一个类即继承类又实现接口时,如何操作?
先继承,后实现
38.接口的好处是什么?
1.用来定义规范
2.解除耦合关系
3.扩展功能
4.实现多态

39.接口和抽象类的区别
1.接口是接口 抽象类是个类
2.接口中不可存在构造器,抽象类可以存在构造器
3.接口中的属性是静态常量,抽象类中可以有普通的属性
4.接口是用来实现的,抽象类用来继承的
5.接口的扩展性强,抽象类的扩展性弱
6.类与类之间是单继承的关系,接口与接口之间是多继承的关系

40.多态的前提
要么继承,要么实现接口
41.多态的弊端
1.提高了扩展性,但是只能使用父类的引用访问父类中的成员。
2.有可能出现类型转换异常

45.如何处理Exception的异常
捕获异常:try{可能出现异常的代码}catch(){处理方式}finally{一定要执行的代码}
抛异常:通过throws关键字在定义方法时声明异常类型,本方法中不做处理,交给上级处理。

46.throw 和 throws的区别?
throw 是真正抛出异常,手动抛出异常。throw出现在函数体。
throws 是声明异常类型时使用的关键字。而throws出现在方法函数头;

47、编译时异常与运行时异常的区别?
编译时异常就是编译时发生的异常,编译时异常必须处理
运行时异常就是运行时发生的异常,运行时异常可处理可不处理

48、创建springboot的前提准备条件:

杂七杂八整理(随笔1)

49、

杂七杂八整理(随笔1)

50什么是Spring MVC框架的控制器?

控制器提供对应用程序行为的访问,通常通过服务接口实现。控制器解析用户的输入,并将其转换为一个由视图呈现给用户的模型。Spring 通过一种极其抽象的方式实现控制器,它允许用户创建多种类型的控制器。

51、

杂七杂八整理(随笔1)

杂七杂八整理(随笔1)

杂七杂八整理(随笔1)

杂七杂八整理(随笔1)

52、线程问题:

Start()方法是启动线程执行run()方法,调用它就等待自己执行run()方法从而执行下面的代码,

而直接调用run()方法,只不过是调用了一下实体类的方法,如果不执行完不会执行下面的代码.

53

杂七杂八整理(随笔1)

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test2 {
    public static void main(String[] args) {
        List<Student> list1 = new ArrayList<Student>();
        List<Student> list2 = new ArrayList<>();
        Iterator it = list1.iterator();
        while(it.hasNext()){
            Student next = (Student)it.next();
            if(next.getSex().equals("男")){
                list2.add(next);
                it.remove();
            }
            if(next.getCode().startsWith("2000")){
                next.setSex("新生"+next.getSex());
            }
        }
    }
}

54、插入排序:

public static void main(String[] args) {
        int[] arr= {3,89,72,43,1};
        int i;
        int j;
        int temp;  //定义一个临时变量,用于交换数据时存储
        //因为我们要对该待排序列的每一个元素都和前面的已排好序的序列进行插入,所以我们会对序列进行遍历
        for(i=1;i<arr.length;i++){  
            //第二层循环主要用于对已排好序的序列进行扫描,和要插入进来的数据进行逐一比较,然后决定插入到哪里
            for(j=0;j<i;j++){ 
                //从前往后对已排好序的元素和待插入元素进行大小比较,然后直到找到一个元素比被插入元素大,则交换位置
                if(arr[j]>arr[i]){
                    temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        int r;
        for(r=0;r<5;r++){
            System.out.println(arr[r]);
        }
    }