牛客网试题总结

牛客网试题总结

JVM:

-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3:

JVM内存配置参数:Xmx代表虚拟机最大内存,Xms代表虚拟机初始内存即最小内存值,Xmn代表轻代大小,而年轻代可以分为五份:伊甸区:幸存者区=3:2,所以可以分为五份5120/5=1024,所以幸存者区等于1024x2=2048

线程私有和线程共享:

私有线程区域:程序计数器、虚拟机栈、本地方法栈

线程共享区域:堆、方法区

java包:

javax.awt 和javax.swing包:

swing是对awt的补充,awt是基于本地的c/c++程序,运行速度快,而swing是基于awt的Java程序,运行速度慢。

2.awt和swing的控件在不同的平台表现可能不同,而swing表现在所有平台一致

servlet 常用的包:

1.javax.servlet
2.javax.servlet.http

Math包:

Math.floor() 表示向下取整,返回double类型 (floor—地板)Math.floor(8.2)=8.0

Math.ceil() 表示向上取整,返回double类型 (ceil—天花板)Math.floor(8.2)=9.0

Math.round() 四舍五入,返回int类型 Math.floor(8.2)=8

html前端和jsp前端:

forword和redirect:

forward,服务器获取跳转页面内容传给用户,用户地址栏不变

redirect,是服务器向用户发送转向的地址,redirect后地址栏变成新的地址

动态include和静态include:

当一个jsp包含另一个jsp的时候会分为静态和动态包含

静态包含:静态包含用include伪码实现,不会检查所含文件的变化,例: <%@ include file=“included.htm” %> ,将两个文件的代码合成一个文件在进行翻译,因此不允许有相同的变量,共享request作用域

动态包含:动态包含用jsp:include动作实现,例: <jsp:include page=“included.jsp” flush=“true” />,他总是会检查所含文件中的变化,适用于包含动态页面,各个文件分别进行编译,然后组合成一个文件,允许有同名的变量,但是共享request作用域

Linux:

多线程:

线程状态分为新生状态、就绪状态、运行状态、阻塞状态、死亡状态

关键字:Thread,synchronized

实现多线程三种方式:

1.继承Thread抽象类,重写run方法,无返回值,不能抛异常(其实Thread类本身也实现了Runnable接口)

2.实现Runnable接口,重写run方法,无返回值,不能抛异常。

3.实现Callable接口,重写call方法,有返回值,get();方法获取返回值,可以抛异常该方法需要代理类执行线程

4.使用线程池(有返回值)

多线程方法:

1.run():是在主线程中执行方法,和调用普通方法一样;

2.start():是创建了新的线程,在新的线程中执行;(异步执行,调用此方法不一定马上执行,看cpu)

单独调用run()方法,是同步执行;通过start()调用run(),是异步执行。

3.sleep();可模拟网络延迟,属于Thread类的方法,让线程暂停指定时间,不释放同步锁,监控不停止

4.wait();属于Object类的方法,让一个线程处于等待状态,会释放同步锁,运行状态直接变成阻塞状态,需要等待notify方法或者notifyAll方法唤醒他变成就绪状态

5.join();加入一个线程,等他执行完才继续之前的线程执行,释放同步锁

6.yield();礼让方法,暂停执行当前的线程,去执行其他线程

7.notify(): 可以唤醒调用wait方法的线程,通知一个线程继续运行。

8.notifyAll(): 可以唤醒所有调用wait方法的线程,通知所有线程继续运行。

9.setPriority(): 设置一个线程的优先级。(范围在1~10,设置最大并不一定先执行,看cpu)
10.interrupt();可以停止一个线程,要加一个boolean值标记线程状态。

11.cyclicBarrier();可以让一组线程等待其他线程。

12.countDownLatch(); 可以让一组线程等待某个事件发生。

线程池:

img

抛InterruptedException:

当线程被打断的时候会抛InterruptedException异常

1.java.lang.Object 类的 wait 方法

2.java.lang.Thread 类的 sleep 方法

3.java.lang.Thread 类的 join 方法

synchronized和ThreadLocation和volatile:
synchronized:

synchronized可以给对象加锁,保证的是线程间的数据共享,保证原子性、可见性、有序性,可能造成死锁,可以使用在变量、方法、和类级别。锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

volatile:

volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取;仅能使用在变量级别,不会造成线程的阻塞,只保证有序性和可见性,不保证原子性

ThreadLocation:

ThreadLocation继承自Object类,没有实现任何接口,ThreadLocation不是一个线程,而是线程的一个局部变量。用于线程间的数据隔离,保证数据安全性,ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本。

基本数据类型+String:

基本数据类型:
Integer:

Integercache已经new了-128~127之间的对象,当第一次执行Integer i= 20会将i指向new好的对象,当第二次执行Integer ii= 20的时候也将ii指向new好的对象,所以ii==i,但是执行Integer iii =new Integer(20)的时候会新建一个Integer对象,执行Integer a=10的时候实际上执行Integer a=valueof(10),Short和Long包装器类型都有cache

类型转换:

java中的整数默认类型是int,小数默认类型是double

byte、short、char的二元运算过后类型会转化成int

只要二元运算中含有double和int和long,二元运算结果都是该类型。

默认值:

byte、int、short、long都是0,double、float都是0.0、boolean是false、char的默认值是 " "、他们的包装类都是null

String:

String底层实现是字符数组

Substring(x,y):

string.substring(x,y)方法指的是截取从x(包括)到y不包括的字符——[x,y)

字符串加号拼接:

除了 “ ” 字符串,其他字符串碰到+号会进行拼接,但是如果字符串在加在最后,前面有数字计算,会先计算前面数组运算的结果然后再和字符串进行拼接,如果字符串加在第一个,后面数字运算用括号,则先计算括号内容再进行拼接。

接口和抽象类:

接口:

接口可以用abstract修饰,,接口中可以有构造函数,但是不能Shiloh,接口可以多继承,接口中的方法用static或者default修饰一定要有空的方法体。

抽象类:

抽象的关键字:abstract

抽象类中不一定有抽象方法,但是包含抽象方法的类一定是抽象类,不能实例化一个抽象类,抽象方法不能有方法体

接口和抽象类区别:

区别1:抽象类体现继承关系,一个类只能単继承。接口体现实现关系,一个类可以多实现。

区别2:抽象类中可以定义非抽象方法和抽象方法,子类继承后可以直接使用非抽象方法。接口的方法都是抽象的,必须由子类去实现。接口中的成员都有固定的修饰符。

区别3:抽象类有构造方法,用于给子类对象初始化。而接口没有构造方法。

特点1:抽象类不可以实例化,即不能用new创建对象。抽象类必须由其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类也是抽象类。

特点2:抽象类abstract关键字不能和哪些关键字共存:

  • final 因为final修饰的方法不能被继承。
  • static因为类.方法(),此方法没有方法体,没有意义。
  • private 因为抽象方法是要被子类覆盖的,加上private子类就不知道这个方法了。

特点3:接口中声明变量必须是final、public 、static的,接口中定义的方法都是abstract、public的。接口里的数据成员必须初始化,且全是常量,不是变量。

特点4:接口是抽象类的变体, 接口也可以通过关键字extends来继承其他接口。

访问修饰符:

修饰符类内部同一个包子类任何地方
private
default
protected
public

代码执行顺序,从上往下优先级减小:

1.父类静态代码块 ( java虚拟机加载类时,就会执行该块代码,故只执行一次)

2.子类静态代码块 ( java虚拟机加载类时,就会执行该块代码,故只执行一次)

3.父类属性对象初始化

4.父类普通代码块(每次new,每次执行 )

5.父类构造函数(每次new,每次执行)

6.子类 属性对象初始化

7.子类普通代码块(每次new,每次执行 )

8.子类构造函数(每次new,每次执行)

没有继承:static代码块>普通代码块>构造函数

有继承:父类的static代码块>子类static代码块>父类普通代码块>父类构造函数>子类普通代码块>子类构造函数

当一个类继承一个类,子类会隐式调用父类无参的构造函数,如果父类没有无参构造函数,且没有调用有参的构造函数,编译出错

线程同步的集合:

线程同步:喂,SHE

喂(Vector)

S(Stack)

H(hashtable)

E(enumeration)

Try catch finally代码块:

1.不管有没有异常,finally都会执行

2.当try或者catch中有return finally都会执行

3.在执行到try或者catch中的return的时候会将计算的结果保存起来,然后执行finally代码块,如果finally中有return,则整个return。

try的三种形式:

1.try-catch

2.try-finally

3.try-catch-finally

坑:

1.Integer对象

Integer i=new Integer(2);
Integer ii=new Integer(2)

i和ii因为用的是new所以这个是两个不同的对象

2.代码循环中

i=i++,i的值永远不变

3.虽然整数类型运算会自动转换成int类型,使用+=会自动强转类型,不报错

4.list的remove方法调用后长度会减一,去除该元素后,后面的会顶上来。

Collection接口+Map接口:

Collection接口:

Collection接口继承自Iterable接口,他的工具类是Collections,他的实现类包括List接口和Set接口,和他平级的是Map接口

List:

List继承于Collection接口,list有序且可以重复,他的常见实现类包含ArrayList、LinkedList、Vector。

ArrayList:底层实现是数组,线程不安全,增删效率慢,查询快,当不指定类型的时候,默认再取出的是Object类型

LinkedList:底层实现是链表,线程不安全,增删率快,查询慢

Vector:线程安全,但是效率较慢

Set:

Set继承于Collection接口,Set无序且不可以重复,他的常见实现类包括HashSet、TreeSet、LinkedHashSet

HashSet:不能重复数据,可以出现空数据,数据无序

TreeSet:不能重复数据,不能出现空数据,数据有序的

LinkedHashSet:数据有序。

Map接口:

Map是一个接口,,底层实现是数组+链表,通过键值对形式存储,他的常见实现类包括HashMap、TreeMap、HashTable。

HashMap:不是线程安全的,无序。底层实现是数组+链表+红黑树

TreeMap:

Hashtable:

循环语句:

循环语句包括 for 、while、 do {} while(){}

do while ():

do{} while(){}会先执行一次do里面的内容,然后再进行判断,如果while里面是true,则继续执行do while,一直到while为flase();

for();

for循环执行顺序:

for(a;b;c){

d}

初始化只执行一次a,然后判断b是不是true,是true执行d,然后再执行c,第二次直接判断b是不是true。

异常类:

异常类的父类是Throwable类,和他同级的有Error类

Throw和Throws的区别:

Throws指的是可能抛出的异常,通常定义在方法头

Throw在方法中,指的是手动抛出异常

MySQL:

乐观锁、悲观锁

乐观锁:顾名思义,比较乐观,每次拿数据的时候都认为别人不会修改,所以不上锁,一般在表中加一个版本字段,每次操作完成修改版本号。

悲观锁:顾名思义,比较悲观,总是假设最坏的情况,认为每次拿数据的时候都认为别人会修改,所以在拿数据的时候都会上锁。

引擎:

MyISAM引擎:5.5之前使用,不支持事务管理,使用表级锁,不支持外键

InnoDB引擎:5.5之后使用,支持事务管理,使用行级锁,支持外键

索引:

Mysql的索引用的是B+树,链表加树,树矮,遍历快

数组:

数组是引用类型,当声明一个数组的时候不能直接限定数组的长度

例 String a[]; 或String [] a; 因为Object是所有类的父类,所以Object [ ];也可以

只能在实例化一个对象的时候才声明长度

例 String a []= new String [2 ];

继承:

父类引用指向子类对象:

当 Father f=new Son();的时候,编译看左边,运行看右边

枚举:

枚举关键字enum

枚举是一种特殊的类,他的构造函数必须为private,枚举中的是常量

虚函数:

c++中的虚函数其实就是java中的普通函数,加上final就变成非虚函数,java中的抽象函数就是c++中的纯虚函数

对象:

创建对象:

创建对象的四种方式:

1.new

2.Class反射类

3.Constructor反射类

4.反序列化

5.对象克隆方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值