java:牛客每日三十题总结
- 总结如下
总结如下
- transient 变量和序列化有关,这是一个空接口,起标记作用,具体的序列化由ObjectOutputStream和ObjectInputStream完成。transient修饰的变量不能被序列化,static变量不管加没加transient都不可以被序列化
- 主义什么时候引用类型是从cache中拿的实例
只有进行直接赋值和使用.valueof()方法并且-值为128至127时,从内部维护的cache中拿取实例。其余的是新建对象。
- java中的移位运算
‘ >>为带符号右移,右移后左边的空位被填充为符号位
’ >>>为不带符号右移,右移后左边的空位被填充为0
没有<<< 因为<<后右边总是补0 - 维护map结构的数据类型底层
ThreadLocalMap使用开放定址法解决hash冲突,HashMap使用链地址法解决hash冲突。 - socket连接过程
其中
- protected abstract void f1();是正确的方法声明,不违反规范,且抽象类可以被子类重写。
- 方法头指:修饰符+返回类型 +方法名(形参列表)
- 接口的访问权限:public,abstract
- 两同两小一大原则
- 返回值和参数列表相同
- 返回值类型小于等于父类的返回值类型
- 异常小于等于父类抛出异常
- 访问权限大于等于父类
- 数组相关知识
- 当数组的初始化完成后数组在内存中所占用的空间将会被固定,即使我们清空这个数组中的元素,它所占用的空间依然会被保留。这造成了Java数组长度的不可变,选项B错误。
- Java语言中,数组是一种引用类型的变量,使用它定义变量时,这个引用变量还没有指向任何有效的内存空间,因此定义数组时不能指定数组的长度。而由于这个引用变量并没有指向任何有效的内存空间,所以没有空间来存储任何元素,只有当对数组初始化后,才可以使用这个数组。正确的定义方式为int[] array =new int[100]。
- 数组是一种引用数据类型,继承自Object类的,所以其中也包含了未被重写的equals()方法,所有的引用变量都能调用equals()方法来判断他是否与其他引用变量相等,使用这个方法来判断两个引用对象是否相等的判断标准与使用==运算符没有区别,只有在两个引用变量指向同一个对象才会返回true。如果想达到E选项描述的效果,需要使用Arrays.equals()方法。
- 局部变量相关知识
- 不是局部变量在该方法被执行/调用时创建,而是应该为在该变量被声明并赋值时创建,可以理解为“当代码执行到该变量被赋值的代码时才被创建”
- 栈会为每个方法在运行的时候分配一块独立的栈帧内存区域,栈帧又包含“局部变量表”、“操作数栈”、“动态链接”以及“方法出口”四个部分。
- java标识符相关信息
void属于java中的关键字 [1]Java标识符只能由数字、字母、下划线“_”或“ ”符号以及 U n i c o d e 字符集组成 [ 2 ] J a v a 标识符必须以字母、下划线 “ ” 或“ ”符号以及Unicode字符集组成 [2]Java标识符必须以字母、下划线“_”或“ ”符号以及Unicode字符集组成[2]Java标识符必须以字母、下划线“”或“”符号以及Unicode字符集开头 [3]Java标识符不可以是Java关键字、保留字(const、goto)和字面量(true、false、null) [4]Java标识符区分大小写,是大小写敏感的