这篇博客是我在刷牛客的笔试题的时候整理的,每天会刷一部分题,不定时更新,不一定全都是Java的知识点,挑着看,个人认为做题巩固知识点会快很多,文章中有什么错误请及时联系我,不要传播错误的知识。
遇到String
类型之前,int
间使用+
表示数值的相加,直到遇到第一个String
,后面按Stirng
类型,变成字符串的拼接
例
System.out.println(1+"10"+3+"2"); // 11032
System.out.println(1+2+"10"+3+"2"); // 31032
System.out.println(1+"10"+3+1+"2"); // 110312
finally
是一定要执行的,当try
,catch
和finally
中都有return
时,只会执行finally
中的
Java中的四类八种
基本数据类型
byte
short
int
long
float
double
boolean
(两个值可取true
false
)char
for循环执行顺序
for(expression1; expression2; expression3){
expression4;
}
执行的顺序应该是:
先条件判断(expression2),再函数体执行(expression4),最后for执行(expression3)
第一次判断时,对象为初始化语句(expression1),后续的判断对象为执行后的结果(expression3)
方法的重写与重载
参数列表
必须与被重写方法相同
返回类型
必须完全与被重写方法的返回类型相同
访问权限
不能
比父类中被重写的方法的访问权限更低
只能被它的子类重写
final的方法不能被重写
static的方法不能被重写
,但是能够被再次声明构造方法不能被重写
同一个包
中,子类可以重写父类所有方法
,除了声明为private
和final
的方法不在同一个包
中,子类只能
重写父类声明为public
和protected
的非final
方法不能继承一个方法
,则不能重写这个方法
不能抛出新的强制性异常
,或者比被重写方法声明的更广泛的强制性异常
,反之则可以必须改变参数列表
可以改变返回类型
可以改变访问修饰符
可以声明新的或更广的检查异常
同一个类
或者在同一个子类
中被重载Java表达式转型规则
byte\short\char型
的值被提升为int型
有一个操作数是long型
,计算结果为long型
有一个操作数是float型
,计算结果为float型
有一个操作数是double型
,计算结果为double型
被final修饰
的变量不会自动改变类型
,当两个被final修饰的变量相操作时,结果会根据左边变量的类型而转化
例题
byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2); /*语句1*/
b6=b4+b5; /*语句2*/
b8=(b1+b4); /*语句3*/
b7=(b2+b5); /*语句4*/
System.out.println(b3+b6);
垃圾收集
Servlet的生命周期
只有在不显示声明构造方法
时,系统才提供默认无参构造方法
静态变量
和静态初始化
块谁先声明谁先初始化
public class Test{
static int cnt = 6;
static{
cnt += 9;
}
public static void main(String[] args){
System.out.println(“cnt =” + cnt);
}
static{
cnt /=3;
};
}
//cnt = 5;
如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法
private方法
只可以在类的内部使用
,在类外根本访问不到,而final方法
可以在类外访问
,但是不可以重写该方法
访问修饰符访问权限
- protected:可被同一包以及包外子类访问
- private:只能自己访问
- default:只能被同一包访问
abstract
关键字- abstract类不能与final,static使用
- interface属于特殊的abstract类,也是abstract类
- 可以有private属性
数组复制的效率System.arraycopy
> clone
> Arrays.copyOf
> for循环
HashMap
是采用 拉链法
解决哈希冲突
java concurrent
包下的4个类
Semaphore
:类,控制某个资源可被同时访问的个数;ReentrantLock
:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;Future
:接口,表示异步计算的结果;CountDownLatch
:类,可以用来在一个线程中等待多个线程完成任务的类抛InterruptedException
的代表方法
线程调用
start()
方法来启动线程,真正实现了多线程运行run()
方法当作普通方法的方式调用,程序还是要顺序执行Lanbda表达式
可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持的类有hashtable
concurrentHashMap
synchronizedMap
序列化是将数据结构
转换成为二进制数据流
或者文本流
的过程
++m
/ m++
++m
先自加再输出,m++
先输出再自加Math类
取整方法
floor
:向下取整,返回小于参数的最大整数,返回double类型
ceil
:向上取整,返回大于参数的最小整数,返回double类型
round
:对小数进行四舍五入后的结果,返回int类型
类中实例变量可以不用初始化,使用相应类型的默认值即可;方法中的定义的局部变量必须初始化,否则编译不通过
list set
有序、可重复
的无序、不可重复
的多重catch块的顺序问题
Exception
异常类最后抛出HashMap的数据结构是 数组+链表
选择语句不能重复执行
关键字super的作用
string字符串的值是不可变
String str = new String("test");
str
的值一直是testSocket套接字
ServerSocket server= new ServerSocket(端口号)
Socket soc=new Socket(ip地址,端口号)
final
关键字
synchronized 锁住的对象
this对象
class对象
类的成员变量默认会被初始化
public class Person{
static int arr[] = new int[5];
public static void main(String a[]){
System.out.println(arr[0]);
}
//输出为0
}
.add(0,4)
是在0号索引上添加数字4
二维数组定义,一维长度必须定义,二维可以后续定义
float []f[] = new float[6][6]
byte
、int
、long
、char
、float
、double
、boolean
各占多少个字节
abstract
只能修饰类和方法 不能修饰字段
JSP的9个内置对象
pageContext
表示页容器 EL表达式、 标签 、上传request
服务器端取得客户端的信息:头信息 、Cookie 、请求参数 ,最大用处在MVC设计模式上response
服务器端回应客户端信息:Cookie、重定向session
表示每一个用户,用于登录验证上application
表示整个服务器config
取得初始化参数,初始化参数在web.xml文件中配置exception
表示的是错误页的处理操作page
如同this一样,代表整个jsp页面自身out
输出 ,但是尽量使用表达式输出Statement
对象的用于执行不带参数的简单SQL语句
Prepared Statement
对象用于执行预编译SQL语句Callable Statement
对象用于执行对存储过程的调用实现或继承了Collection接口有 List
、Vector
、Set
合法的标识符
$
和 _
以外的其它字符JVM命令
jps
:查看本机java进程信息jstack
:打印线程的栈信息,制作线程dump文件jmap
:打印内存映射,制作堆dump文件jstat
:性能监控工具jhat
:内存分析工具jconsole
:简易的可视化控制台jvisualvm
:功能强大的控制台>>
、>>>
>>
带符号右移>>>
无符号右移,高位用0填充forward
和 redirect
JVM堆内存中的区域有哪些
Eden区
,Survivor区
,old区
is-a
:继承关系 has-a
:从属关系 like-a
:组合关系
is-a
,理解为是一个,代表继承关系。 如果A is-a B
,那么B就是A的父类like-a
,理解为像一个,代表组合关系。 如果A like a B
,那么B就是A的接口has-a
,理解为有一个,代表从属关系。 如果A has a B
,那么B就是A的组成部分equal
是内容比较 ==
是比较地址
数组下标从0开始
已知 声明并初始化二维数组 int a[ ][ ]={{1,2},{3,4},{5,6}} ,则 a[1][1] 的值为
0 1
0 {1,2}
1 {3,4}
2 {5,6}
// a[1][1]=4
访问修饰符
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
---|---|---|---|---|
private | Yes | |||
default | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
名称 | 说明 | 备注 |
---|---|---|
public | 可以被任何类访问 | |
protected | 可以被同一包中的所有类访问,可以被所有子类访问 | 子类没有在同一包中也可以访问 |
private | 只能够被 当前类的方法访问 | |
无访问修饰符 | 可以被同一包中的所有类访问 | 如果子类没有在同一个包中,也不能访问 |
public
> protected
> 默认(包访问权限)
> private
HttpServlet
容器响应Web客户请求流程
发出请求
解析
Web客户的Http请求
创建
一个HttpRequest对象
,在这个对象中封装Http请求信息
调用
一个HttpResponse对象
调用
HttpServlet的service方法
,这个方法中会根据request的Method
来判断
具体是执行doGet还是doPost
,把HttpRequest和HttpResponse对象作为service方法的参数``传给HttpServlet对象
调用HttpRequest
的有关方法,获取HTTP请求信息
调用HttpResponse
的有关方法,生成响应数据
传给Web客户
Object 类
中的方法
registerNatives()
//私有方法getClass()
//返回此 Object 的运行类hashCode()
//用于获取对象的哈希值equals(Object obj)
//用于确认两个对象是否“相同”clone()
//创建并返回此对象的一个副本toString()
//返回该对象的字符串表示notify()
//唤醒在此对象监视器上等待的单个线程notifyAll()
//唤醒在此对象监视器上等待的所有线程wait(long timeout)
//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待wait(long timeout, int nanos)
//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待wait()
//用于让当前线程失去操作权限,当前线程进入等待序列finalize()
//当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法抽象类和接口的修饰符
JDK 1.8前
,抽象类的方法默认访问权限为protectedJDK 1.8时
,抽象类的方法默认访问权限变为defaultJDK 1.8前
,接口中的方法必须是public的JDK 1.8时
,接口中的方法可以是public的,也可以是default的JDK 1.9时
,接口中的方法可以是private的JVM内存五大区域
虚拟机栈(VM Stacks)
-> 包含栈帧(Frame)
本地方法栈(Native Method Stack)
PC寄存器(Program Counter Register)
方法区(Method Area)
堆(Heap)
抽象类和接口的区别
面向方面编程 AOP
偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性,AOP 的一个很重要的特点是源代码无关性
面向对象编程 oop
则是对业务分析中抽取的实体进行方法和属性的封装DBCP数据源
、C3P0数据源
、Spring的数据源实现类(DriverManagerDataSource)
、JNDI数据源
mysqldump
三级模式结构和两级映象
概念模式
,外模式
,内模式
可以有多个外模式
只有一个内模式
外模式/模式映像
、模式/内模式映像
with check
选项时修改数据需满足视图的选择条件,而无with check
时就无需满足查询窗口
,不能新建between
包括上下边界值WHERE G BETWEEN 60 AND 100
== WHERE G>=60AND G < =100
数据库完整性
是指数据库中数据在逻辑上的一致性
、正确性
、有效性
和相容性
drop
删除表,delete
用于删除表中的数据SELECT..INTO...FROM
语句将现有表中的数据插入到新表中create procedure
:创建存储过程exec procedure
:执行存储过程alter procedure
:修改存储过程drop procedure
:从数据库中删除过程数据库管理系统
是数据库的核心位置一对多
的联系,为控制子表和父表的关联,可以设置"参照完整性规则",为此要求这两个表在父表连接字段上建立主索引,在子表连接字段上建立普通索引
联系不能脱离实体
,必须有实体连接且可以是实体的自身联系逻辑设计阶段
.DBC
.DBF
.SCX
.PJX
唯一性索引
,可以保证数据库表中每一行数据的唯一性
加快数据的检索速度
加速表和表之间的连接
提高系统的性能
耗费时间
占用物理空间
索引需要动态维护,降低了数据维护的速度
%
可以表示零个、一个、多个字符
NOT NULL
:用于控制字段的内容一定不能为空(NULL)UNIQUE
:控制字段内容不能重复,一个表允许有多个 Unique 约束PRIMARY KEY
:也是用于控制字段内容不能重复,但它在一个表只允许出现一个FOREIGN KEY
:预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一CHECK
:用于控制字段的值范围DEFAULT
:用于设置新记录的默认值OLE类型
消除主属性对码的部分和传递函数依赖
规范化为BCNFBEGIN-END
将多个语句捆绑