题一:JVM类加载(先加载父类,再加载子类对象)前几天去线下参加了面试(一面笔试+人事),整体感觉表现的不是很好,简略分析一下,第一点就是准备不充分,第二点就是对于基础知识掌握不够牢固,第三点就是刷的面试题太少(刷题+多敲代码分析),说说这次面试卷子情况其实卷子整体难度并不大,就是一些常规的Java基础题,主要涉及的知识点JavaSE语法,多线程,集合,JVM,IO流,JDBC,WEB,数据库,Linux等,下面就把一些能够记住的题记录一下。
public class JsSyProject {
public static void main(String[] args) {
System.out.println(B.b);
}
}
class A {
static {
System.out.println("A");
}
}
class B extends A {
public static String b= "C";
static {
System.out.println("B");
}
}
运行效果:
// 面试第二题
@Test
public void test(){
// 下面那个操作符不正确
int i =12<<3;// 支持 左移
// int i=0;
// ++(i++);// 不支持
i%=2;// 支持
}
题三:this和super
① this是指向本对象的指针,super是指向父类对象
② super()、this()都必须出现在构造函数的第一行,且不能同时出现,因为this()中已经默认调用了父类的super()。
③ this出现在同类中,指代本类本对象;super出现在子类中,指代父类及父类的对象,且他们都指代对象,所以不能与static修饰符一起使用
- 测试类(TestCase):一个包含一个或是多个测试的类,在Junit中就是指的是包含那些带有@Test注解的方法的类,同一样也被称作“测试用例”;
- 测试集(TestSuite):测试集是把多个相关测试归入一个组的表达方式,在Junit中,如果我们没有明确的定义一个测试集,那么Juint会自动的提供一个测试集,一个测试集一般将同一个包的测试类归入一组;
- 测试运行器(TestRunner):执行测试集的程序。
学习链接:Junit核心——测试类(TestCase)、测试集(TestSuite)、测试运行器(TestRunner)
题五:创建型设计模式(设计模式)下列哪一个不属于创建型设计模式:
A. 模板模式 B.工厂模式 C.抽象工厂模式 D.单例模式
- 模板模式属于行为型模式
- 创建型设计模式:工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)
下图来源:String、StringBuffer与StringBuilder之间区别
- String
String是一个字符数组 常量
- StringBuffer
StringBuffer保存的是一个字符数组 变量
StringBuffer扩容机制
StringBuffer线程安全
- StringBuilder
StringBuilder存放的内容为字符数组 变量
都是使用AbstractStringBuilder父类进行操作
线程不安全(速度更快,适合单线程操作)
题八:PreparedStatement比Statement有什么优势?管道流是用来在多个线程之间进行信息传递的Java流,管道流分为字节流管道流(PipedOutputStream 和 PipedInputStream)和字符管道流(PipedWriter 和 PipedReader)。
题九:数据类型PreparedStatement是预编译的,因此,性能会更好。同时,不同的查询值,PreparedStatement可以重用。
修改后:
题十一:抽象类和接口的区别① List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合
② List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的
下面内容来源于:https://www.cnblogs.com/WanghHongLin/archive/2018/07/27/9380150.html
题十二:JVM虚拟机① 抽象类可以通过子类间接实例化,接口不能实例化,所以接口不占用堆空间,抽象类占用堆空间。
② 抽象类可以拥有私有属性、方法,接口不能拥有。
③ 抽象类方法不能使用default关键字修饰,接口方法可以。
④ 抽象类只能被extends不能被implements,接口可以被implements和extends
⑤ 接口没有构造方法,抽象方法有。接口调用newInstance()抛出 java.lang.NoSuchMethodException:Test2.< init>(),抽象类抛出 java.lang.InstantiationException
⑥ 接口所有变量都是public static final 不可变, 抽象类可以使用任意权限修饰符修饰变量。
⑦ 抽象类不能多extends,接口可以多extends
⑧ 抽象类抽象方法可以被public, protected修饰,接口抽象类只能被public 修饰
⑨ private 可以修饰内部类,private 不能修饰内部接口
⑩ 接口支持lambda表达式@FunctionInterface,抽象类不支持
方法区位于线程共享区,所以线程是非隔离的
HTTP 有两个常用版本,分别是 HTTP1.0和 HTTP1.1。主要区别在于 HTTP1.0 中每次请求和应答都会使用一个新的 TCP连接,而从 HTTP1.1 开始,运行在一个 TCP 连接上发送多个命令和应答。因此大幅度减少了 TCP 连接的建立和断开,提高了效率。
相关学习链接(上面问题解答来源):https://www.cnblogs.com/it-tsz/p/11408668.html
题十四Linux命令查看端口杀掉进程命令:
ps -ef| grep java #查看当前的Java进程 kill -9 [端口号] #强制杀掉
相关学习链接:Linux下JAVA常用命令大全
题十四:数据库(三张表的多对多查询,分组,递归排序)如果一个表中(student)的性别是用数值0表男,1表女查询的时候显示男和女。
select name as '姓名',case sex when '0' then '男' when '1' then '女' end as '性别' from student;



