牛客网刷题错题记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zzxzzxhao/article/details/82893167

目录

目录

Java

1.静态内部类

2.关于String,StringBuilder以及StringBuffer

3.java语言特性

4.非抽象类实现接口的问题

5.互斥锁

6. Socket 通信编程

7.类的初始化顺序

8.变量的存储区

9.jvm线程共享问题

10.java内存回收问题

11.关于java concurrent包四个类的区别

12.Statement在JDBC中相当于SQL语句的载体


Java

1.静态内部类

静态内部类可以访问外围类的静态数据,包括私有数据,但不能访问非静态数据;

非静态内部类可以直接访问外围类的数据,包括私有数据

package test;

public class test {//外部类
	int a = 1;
	static int b = 9;
	private String str = "test";
	private static int c = 33;
	
	class innerClass {//非静态内部类
		void method(){//可直接访问外部类数据,包括静态数据,私有数据
			System.out.println(a);
			System.out.println(b);
			System.out.println(str);
			System.out.println(c);
		}
	}
	
	static class staticInnerClass {//静态内部类
		void method(){
			System.out.println(a);//default访问不了
			System.out.println(b);//可以访问静态数据
			System.out.println(c);//也可以访问私有的静态数据
			System.out.println(str);//但是非静态的访问不了
		}
	}
}

2.关于String,StringBuilder以及StringBuffer

  • 对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象
    • java中的字符串存储在字符串常量区,不会改变,发生改变是会新创建一个对象
  • StringBuffer是线程安全的
  • StringBuilder是线程不安全的
  • 可以修改StringBuffer和StringBuilder的内容
    • StringBuilder和StringBuffer底层都是以字符数组存放的,可以修改内容

3.java语言特性

  • java致力于检查程序在编译和运行时的错误
  • java能运行虚拟机实现跨平台
  • java自己操作内存减少了内存出错的可能性
  • java还实现了真数组,避免了覆盖数据的可能性
    • ps:内存连续就是真数组,内存不连续就是假数组

4.非抽象类实现接口的问题

  • 非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头不一定一致
    • 方法名相同,参数类型相同
    • 子类返回类型小于等于父类方法返回类型
    • 子类抛出异常小于等于父类方法抛出异常
    • 子类访问权限大于等于父类方法访问权限

5.互斥锁

  • synchronized关键字是同步代码块关键字,对对象加互斥锁

6. Socket 通信编程

  • 服务端通过new ServerSocket()创建
  • 服务器端通过TCP连接对象调用accept()方法创建通信的Socket对象
  • 客户端通过new Socket()方法创建通信的Socket对象

Socket套接字 

就是源Ip地址,目标IP地址,源端口号和目标端口号的组合

服务器端:ServerSocket提供的实例

ServerSocket server= new ServerSocket(端口号)

客户端:Socket提供的实例

Socket soc=new Socket(ip地址,端口号)


7.类的初始化顺序

  • 初始化父类中的静态成员变量和静态代码块
  • 初始化子类中的静态成员变量和静态代码块
  • 初始化父类中的普通成员变量和代码块,在执行父类中的构造方法
  • 初始化子类中的普通成员变量和代码块,在执行子类中的构造方法

8.变量的存储区

class A {
	private String a = "aa";//类的成员变量
	public boolean methodB() {
	    String b = "bb";//局部变量
	    final String c = "cc";//局部变量
		return false;
	}
}
  • 类中的成员变量,存放在堆区
    • 堆区:只存放类对象,线程共享;
  • 方法中的局部变量,存放在栈区
    • 栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;
    • 方法区:又叫静态存储区,存放class文件和静态数据,线程共享;

9.jvm线程共享问题

  • 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
  • 原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
  • Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
  • 方法区:
    • 1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
    • 2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

10.java内存回收问题

  • java的内存回收是自动的,Gc在后台运行,不需要用户手动操作
  • java中不允许使用指针
  • 内存回收线程可以释放无用的对象内存
  • 内存回收线程负责释放无用内存

11.关于java concurrent包四个类的区别

  • Semaphore:类,控制某个资源可被同时访问的个数(与并发编程锁机制相关)
  • ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大(与并发编程锁机制相关)
  • Future:接口,表示异步计算的结果(线程任务的返回结果的‘欠条’)
  • CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类(与并发编程锁机制相关)

12.Statement在JDBC中相当于SQL语句的载体

  • Statement是最基本的用法,采用字符串拼接的方式,存在注入漏洞
  • PreparedStatement对Statement中的SQL语句进行预编译,同时检查合法性,效率高
  • CallableStatement接口扩展 PreparedStatement,用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement 接口还具有对 PreparedStatement 接口提供的输入参数的支持
  • BatchedStatement不是标准的Statement类

猜你喜欢

转载自blog.csdn.net/zzxzzxhao/article/details/82893167