牛客网刷题

2019年9月nowcoder刷题记录

关于负数取余的运算,结果的符号和被除数相同
———————————————————————————————————

构造方法名必须与类名相同。方法名可以与类名相同
———————————————————————————————————

关于构造方法的调用:
在类的其他构造方法中可以用this()的方式调用本类中其他构造方法
在一个类的子类中可以通过super()调用父类中指定的构造方法
在反射中可以使用newInstance()的方式调用
———————————————————————————————————

子类重写了父类的方法之后,若想调用父类中被重写的方法,用super
未被重写的方法可以直接调用
———————————————————————————————————

Java基本类型中,不明确指定时,整数型变量默认是int型,带小数的默认是double型
———————————————————————————————————

关于方法重载:
同一个类中多态的体现
方法名必须相同
参数列表必须不同
方法的返回值类型,访问修饰符可以相同也可以不同
———————————————————————————————————

transient:
用transient关键字标记的成员变量不参与序列化过程,当一个对象被序列化时,被transient修饰的变量不会被序列化
———————————————————————————————————

HashMap和Hashtable的区别:
两者都实现了Map接口
HashMap允许用null作为key或value,Hashtable不允许
HashMap是非线程安全的,Hashtable是线程安全的
关于HashMap:HashMap的底层是由数组加链表实现的,对于每一 个key值,都需要计算哈希值,然后通过哈希值来确定顺序,并不是按照加入顺序来存放的,因此可以认为是无序的,但不管是有序还是无序,它都一个自己的顺序。
———————————————————————————————————

迭代HashMap的快速失败机制(Fail-Fast):
它是Java集合的一种错误检测机制,对于线程不安全的集合对象的迭代器,如果在使用迭代器的过程中,有其他线程修改了集合对象的结构或者元素数量,那么将抛出ConcurrentModificationException
———————————————————————————————————

StringBuffer和StringBuilder:
两者功能相同,区别是StringBuilder不是线程安全的
两者底层都是以字符数组存放,可以修改内容
———————————————————————————————————

关于线程:
每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值, 在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到对象在堆中变量,这样在堆中的对象的值就产生变化了
———————————————————————————————————

volatile关键字:
当一个变量定义为volatile之后将具备两种特性,1.保证此变量对所有线程的可见性,当一个线程修改了这个变量的值,volatile 保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新。但普通变量做不到这点,普通变量的值在线程间传递均需要通过主内存来完成。2.禁止指令重排序优化(什么是指令重排序: 是指CPU采用了允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理)。
volatile 的读性能消耗与普通变量几乎相同,但是写操作稍慢,因为它需要在本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行。
———————————————————————————————————

关于Java程序编译:
Java编译成的是字节码,再被各系统的JVM翻译成本系统可以识别的机器码,这就是Java一次编译多平台运行的核心
Java源文件生成的是class文件,与系统无关
字节码和机器码不是一回事,Java程序在运行时字节码才会被JVM翻译成机器码,所以Java是解释性语言
Java编译出来的目标文件,可以运行在任意JVM上。这句话是错的,低版本的JVM无法运行高版本的Java代码
———————————————————————————————————

关于编译单元:
.java文件是一个编译单元,每个编译单元最多只能有一个public修饰的类,该类的类名必须和文件名相同(包括大小写)。一个.java文件中可以包含许多个类,但其他类都是为public类起支撑作用的,当.java文件中没有public标记的类时,这个类不能被外部访问,也就失去了意义
———————————————————————————————————

关于抽象方法:
包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:
1)抽象类不能用来创建对象,即不能实例化
2)抽象方法必须为public或者protected(因为如果为private, 则不能被子类继承,子类便无法实现该方法),抽象方法默认为public
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为 为abstract类。
在其他方面,抽象类和普通的类并没有区别
———————————————————————————————————

关于访问权限:
对于外部类而言,它也可以使用访问控制符修饰,但外部类只有两种访问控制级别,public default(同一个类,同一个包),因为外部类是每个编译单元的最外层,它没有处于任何类的内部,也没有所在类的子类的概念。因此private protected访问控制符对外部类没有意义
内部类的上一级程序单元是外部类,因此内部类可以用 private protected public 修饰
局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制符修饰
———————————————————————————————————

Java异常处理共有3块,分别是try catch finally
当catch或finally块中抛出异常时,异常处理之后的代码将不能正常执行,即finally块结束后的代码不能正常执行
———————————————————————————————————

线程安全的类有
Vector StringBuffer Hashtable stack enumeration
ConcurrentHashMap 采用分段加锁,所以也线程安全
Properties 是 Hashtable的子类,所以也是线程安全的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值