面试篇------百度2019Java工程师面试题总结

1.Oracle数据库中,在SQL语句中连接字符串的方法是concat
2.Java中基本的编程单元是类,基础的存储单元是变量
3.通过Intent传递一些二进制数据的方法有哪些?
  • 1.使用Serializable接口实现序列化。利用Bundle.putSerializable(Key,Object);这里的object对象需要实现serializable接口。
  • 2.实现Parcelable接口串行化。利用Bundle.putParcelable(Key, Object);这里Object对象需要实现Parcelable接口。
4.this() super() 注意点:
  • 1.调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

  • 2.super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。

  • 3.super()和this()均需放在构造方法内第一行。

  • 4.尽管可以用this调用一个构造器,但却不能调用两个。

  • 5.this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

  • 6.this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

  • 7.从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

5.四类八种
  • 整形:int short byte long
  • 浮点型:double float
  • 布尔型:boolean
  • 字符型:char
6.HTTP
  • 1.一台服务器要与HTTP1.1兼容,只要为资源实现GET和HEAD方法即可
  • 2.GET是最常用的方法,通常用于请求服务器发送某个资源
  • 3.HEAD和GET类似,但服务器在响应中值返回首部,不返回实体的主体部分
  • 4.PUT让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者。如果那个URL已经存在的话,就用这个主体替代它
  • 5.POST起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被发送给服务器,然后由服务器将其发送到要去的地方
  • 6.TRACE会在目的服务器端发起一个环回诊断,最后一站的服务器会弹回一个TRACE响应,并在响应主体中携带它收到的原始请求报文,TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链
  • 7.OPTIONS方法请求WEB服务器 告知其支持的各种功能。可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法
  • 8.DELETE请求服务器删除请求URL指定的资源
7.ARP

1. ARP欺骗攻击的检测与防御
检测:

  • 1.网络频繁掉线
  • 2.网速突然变慢
  • 3.使用arp -a命令查看的网关mac地址与真实的网关mac地址不同
  • 4.使用嗅探软件发现局域网内存在大量arp应答包
    防御:
  • 1.绑定mac地址
  • 2.使用静态arp缓存表
  • 3.使用arp服务器,通过服务器来查找arp转换表来响应其他机器的广播
  • 4.使用arp欺骗防护软件

2. ARP欺骗的危害

  • 1.使同一网段内其他用户无法上网
  • 2.可以嗅探到交换式局域网中的所有数据包
  • 3.对信息进行篡改
  • 4.可以控制局域网内任何主机
8.在switch(expression)语句中,expression的数据类型不能是double,float(会出现精度问题)
9.有一条TCP连接,它的最大报文段长度为4KB,TCP拥塞窗口为24KB,这时候发生超时,那么该拥塞窗口变为了

TCP报文中,当发生超时事件,阈值被设置成当前拥塞窗口的一半,而拥塞窗口被设为一个最大报文段,也就是4KB。

10.Oracle数据库表空间与数据文件的关系描述正确的是 : 一个表空间可以对应多个数据文件
11.JVM中堆也是公用的
12。三次挥手,四次分手

TCP释放连接第二次挥手时ACK(1),第三次挥手时ACK(1)

13.Java Applet

JavaApplet就是用Java语言编写的小应用程序,可以直接嵌入到网页中,并能够产生特殊的效果

  • Java Applet必须有HTML文件才能运行
  • Java Application与Applet所用编译命令相同
  • 通常情况下JavaApplication只能有一个main()方法
  • Applet是能够嵌入HTML语言中,并在浏览器中运行的类。Applet的运行环境是Web浏览器,所以必须建立HTML文件,告诉浏览器如何加载和运行Applet。Applet是不能直接通过Java命令启动运行的。
14.如果希望在网络中通过某个类的对象包装数据进行传输,那么这个类需要实现接口:Serializable
15.形式参数
  • 形式参数可被视为local variable。形参和局部变量一样都不能离开方法。都只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见。
  • 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。
    不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。
    一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final
16.一颗二叉树的叶子节点有5个,出度为1的结点有3个,该二叉树的结点总个数是12

对于二叉树来说,节点的非空子树个数叫做节点的度,叶子节点的度数0,只有一个子树的节点度数是1。根节点度数最大为2,因为二叉树中所有节点的度数均不大于2
在这里插入图片描述

17.操作系统是裸机上的第一层软件,其他系统软件(汇编程序、编译程序和Java解释器 )和应用软件都是建立在操作系统基础上的。
18.数据域,指针域
  • 数据域是结点中存储数据元素的部分。指针域是结点中存储数据元素之间的链接信息即下一个结点地址的部分
  • 数据域不一定是基本类型,也可以是引用类型
19.垃圾回收器

CMS垃圾回收器(初始标记 重新标记)阶段是没用用户线程参的

  • 串行回收,Serial回收器,单线程回收,全程stw;
  • 并行回收,名称以Parallel开头的回收器,多线程回收,全程stw;
  • 并发回收,cms与G1,多线程分阶段回收,只有某阶段会stw;

CMS回收过程

  • 1.初次标记(STW initial mark):标记老年代中所有的GC Roots引用的对象;标记老年代中被年轻代中活着的对象引用的对象(初始标记也会扫描新生代);会导致stw。
  • 2.并发标记(Concurrent marking):从初次标记收集到的‘根’对象引用开始,遍历所有能被引用的对象
  • 3.并发可中断预清理(Concurrent precleaning):改变当运行第二阶段时,由应用程序线程产生的对象引用,以更新第二阶段的结果。标记在并发标记阶段引用发生变化的对象,如果发现对象的引用发生变化,则JVM会标记堆的这个区域为Dirty Card。
    那些能够从Dirty Card到达的对象也被标记(标记为存活),当标记做完后,这个Dirty Card区域就会消失。
  • 4.最终重新标记(STW remark):由于并发预处理是并发的,对象引用可能发生进一步变化。因此,应用程序线程会再一次被暂停(stw)以更新这些变化,并且在进行实际的清理之前确保一个正确的对象引用视图。这一阶段十分重要,因为必须避免收集到仍被引用的对象。
    1. 并发清理(Concurrent sweeping):清理垃圾对象,这个阶段收集器线程和应用程序线程并发执行。
    1. 并发重置(Concurrent reset):CMS清除内部状态,为下次回收做准备。

CMOS回收特点

  • cms只会回收老年代和永久带(1.8开始为元数据区,需要设置CMSClassUnloadingEnabled),不会收集年轻带;
  • cms是一种预处理垃圾回收器,它不能等到old内存用尽时回收,需要在内存用尽前,完成回收操作,否则会导致并发回收失败;所以cms垃圾回收器开始执行回收操作,有一个触发阈值,默认是老年代或永久带达到92%;
20.jdk中关于操作装箱、拆箱
  • 在JDK中,装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的(xxx代表对应的基本数据类型)
  • Integer、Short、Byte、Character、Long 这几个类的valueOf方法的实现是类似的,有限可列举,共享[-128,127]
  • Double、Float的valueOf方法的实现是类似的 , 无限不可列举,不共享
  • Boolean的valueOf方法的实现不同于以上的整型和浮点型,只有两个值,有限可列举,共享;
21.关于java堆栈的说法
  • 栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量
  • 在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内
  • 在java中,所有使用new xxx()构造出来的对象都在堆中存储
  • 堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java面试题真的很多,下面我来回答一个有关多线程的问题。 在Java实现多线程有两种方式,一种是继承Thread,另一种是实现Runnable接口。这两种方式有何区别? 继承Thread的方式是直接定义一个继承Thread,并重写它的run()方法。然后创建该对象,并调用对象的start()方法来启动线程。这种方式简单直接,但因为Java是单继承的,所以如果某个已经继承了其他,就不能再直接继承Thread实现多线程。 实现Runnable接口的方式是定义一个实现Runnable接口,并实现其唯一的抽象方法run()。然后创建Thread对象,将实现了Runnable的对象作为参数传递给Thread的构造方法。最后调用Thread对象的start()方法来启动线程。这种方式灵活性更大,因为Java允许一个实现多个接口,所以即使某个已经继承了其他,仍然可以通过实现Runnable接口来实现多线程。 另一个区别在于资源共享的问题。继承Thread的方式,不管是数据还是方法,都是线程自己拥有的,不存在共享的情况。而实现Runnable接口的方式,多个线程可以共享同一个对象数据和方法,因为多个线程共同操作的是同一个Runnable对象总结来说,继承Thread方式简单直接,但只能通过单继承来实现多线程;实现Runnable接口方式更灵活,可以解决单继承的限制,并且多个线程可以共享同一个Runnable对象数据和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值