文章目录
常见的Java面试题
一,javac Java命令
javac编译命令:将Java文件编译成.class字节码文件
Java运行命令:运行.class文件
二,B(browser)/S(server)跟C(client)/S(server)架构区别是什么?
B/S结构即浏览器结构,特点是分布性强、维护方便、开发简单且共享性强、总体拥有成本低
C/S结构即客户端和服务器结构,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据
三,final的用法?
1,当修饰变量的时候表示常量
2,当修饰方法的时候表示这个方法不能被重写
3,当修饰类的时候表示不能被继承
四,重写和重载的区别
重载是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。
重写时父类于子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法于父类中的某一方法具有相同的方法名,返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法则可使用super关键字。
五,访问修饰符的区别
访问级别 | 修饰符 | 同类 | 同包 | 子类 | 不同的包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | – |
默认 | 没有访问修饰符 | √ | √ | – | – |
私有 | private | √ | – | – | – |
六,父类代码块、父类静态方法、父类构造方法、子类代码块、子类静态方法,子类构造方法,执行顺序如何?
先静态,后父类 先代码块 后构造方法
先后顺序是
父类静态方法,子类静态方法
父类代码块,父类构造方法,
子类代码块,子类构造方法
七,throw跟throws区别?
Throw:
1. 作用在方法内,表示抛出具体异常,由方法体内的语句处理。
2. 具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。
Throws:
1. 作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。
2. 主要的声明这个方法会抛出某种类型的异常,让它的使用者知道捕获异常的类型。
3. 出现异常是一种可能性,但不一定会发生异常。
八,where跟having的区别?
where子句:是在分组之前使用,表示从所有数据中筛选出部分数据,以完成分组的要求,
在where子句中不允许使用统计函数,没有group by子句也可以使用。
having子句:是在分组之后使用的,表示对分组统计后的数据执行再次过滤,可以使用
统计函数,有group by子句之后才可以出现having子句。
九,请说下3次握手跟4次挥手?
三次握手:
第一次握手:客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。
第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。
第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端和服务器进入ESTABLISHED建立成功状态,完成三次握手。
四次挥手:
第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。
第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。
第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。
第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手。
十,断开连接的时候客户端为什么需要的等待2MSL时间?
保证客户端发送的最后一个ACK报文能够到达服务器,
因为这个ACK报文可能丢失,站在服务器的角度看来,
我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,
应该是我发送的请求断开报文它没有收到,
于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,
接着给出回应报文,并且会重启2MSL计时器。