牛客刷题第二弹

  1. ASCII
    牛客刷题第二弹_第1张图片

  2. 定义在类中的变量是类的成员变量,可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0
    局部变量是定义在方法中的变量,必须要进行初始化,否则不同通过编译
    被static关键字修饰的变量是静态的,静态变量随着类的加载而加载,所以也被称为类变量
    被final修饰发变量是常量

  3. Servlet
    1.service方法是在servlet生命周期中的服务期,默认在HttpServlet类中实现,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法实现。
    2.GenericServlet 抽象类给出了设计servlet的一些骨架,定义了servlet生命周期还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的。doget/dopost与Http协议有关,是在 javax.servlet.http.HttpServlet 中实现的。
    3.doGet和doPost方法在HttpServlet类中实现,GenericServlet中实现了service()

  4. 常说所有的请求都先由service方法处理,而javax.servlet.GenericServlet接口实现了javax.servlet.Servle接口,且javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子类。只有最先定义好了的service方法才可以处理所有的请求。
    牛客刷题第二弹_第2张图片

  5. 拆箱和装箱
    通俗的讲,就是基本数据类型和包装类之间的转换。如: int 类型和 Integer 类的转换
    基本数据类型转化成包装类是装箱 (如: int --> Integer)。
    包装类转化成基本数据类型就是拆箱
    (如:Integer --> int)。
    包装类就是引用类型,基本数据类型就是值类型。

  6. Math.ceil / Math.floor
    ceil:天花板数,向上取整。
    floor:地板数,向下取整
    Math.ceil(d1)
    ceil 方法上有这么一段注释:If the argument value is less than zero but
    greater than -1.0, then the result is negative zero
    如果参数小于0且大于-1.0,结果为 -0
    Math.floor(d1)
    ceil 和 floor 方法 上都有一句话:If the argument is NaN or an infinity or positive zero or negative zero, then the result is the same as the argument,意思为:如果参数是 NaN、无穷、正 0、负 0,那么结果与参数相同,

如果是 -0.0,那么其结果是 -0.0

  1. switch 支持哪些值
    jdk1.7之前byte,short ,int ,char
    jdk1.7之后加入String
    1、以java8为准,switch支持10种类型
    基本类型:byte char short int
    对于包装类 :Byte,Short,Character,Integer String enum
    2、实际只支持int类型 Java实际只能支持int类型的switch语句,那其他的类型时如何支持的
    a、基本类型byte char short 原因:这些基本数字类型可自动向上转为int, 实际还是用的int。
    b、基本类型包装类Byte,Short,Character,Integer
    原因:java的自动拆箱机制 可看这些对象自动转为基本类型
    c、String 类型 原因:实际switch比较的string.hashCode值,它是一个int类型 如何实现的,网上例子很多。此处不表。
    d、enum类型 原因 :实际比较的是enum的ordinal值(表示枚举值的顺序),它也是一个int类型 所以也可以说 switch语句只支持int类型

  2. byte类型的变量在做运算时被会转换为int类型的值,故A、B左为byte,右为int,会报错;而C、D语句中用的是a+=b的语句,此语句会将被赋值的变量自动强制转化为相对应的类型。
    +=会自动强转(自动装箱功能),但是+必须要手动强转b=(byte)(a+b)

  3. 重定向行为
    redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先去局办(index.html)临时身份证,这时你就会走出银行,自己前往局,地址栏变为index.html.
    forward:请求转发:服务器行为,地址栏不变。举例:你把钱包落在出租车上,你去警察局(forward.jsp)报案,警察局说钱包落在某某公司的出租车上(index.html),这时你不用亲自去找某某公司的出租车,警察局让出租车自己给你送来,你只要在警察局等就行。所以地址栏不变,依然为forward.jsp

  4. Java类Demo中存在方法func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( )
    牛客刷题第二弹_第3张图片

这道题考的是数据类型转换问题。由大到小需要强制转换,由小到大不需要。

A:return; 没有返回值,错误

B:short → float 无须强制转换,正确

C:long → float 无须强制转换(这个最选项容易出错),正确。

float占4个字节为什么比long占8个字节大呢,因为底层的实现方式不同。
浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的。
第1位,符号位,即S
接下来8位,指数域,即E。
剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1)
然后按照公式: V=(-1)^s * M * 2^E
也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大。

  1. 导包只可以导到当前层,不可以再导入包里面的包中的类

要导入java/awt/event下面的所有类只能是import java.awt.event.*

  1. 对象之间存在的关系
    USES-A:依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。
    关联关系:A类会用到B类,这是一种强依赖关系,是长期的并非偶然。在代码中的表现为:A类的成员变量中含有B类。
    HAS-A:聚合关系,拥有关系,是关联关系的一种特例,是整体和部分的关系。比如鸟群和鸟的关系是聚合关系,鸟群中每个部分都是鸟。
    IS-A:表示继承。父类与子类,这个就不解释了。

  2. 以下 b 的值是: byte b = (byte)129;
    这题考察的就两个知识点:一、强制转换(主要涉及各个类型占几个字节,这里我只简单说一下byte型占一个字节,也就是8位,int型4个字节,32位);二、在计算机系统中,数值一律用补码来表示(存储)
    正数:补码=反码=原码(当然以二进制形式表达)
    129 int类型(4个字节)二进制: 00000000 00000000 00000000 10000001
    强制转换byte型后,只有一个字节即 10000001(注意这里从二进制角度看,第一位是符号位,即求负数的补码接下来)
    只要求出上面原码对应的补码就行了,然后再转换对应的int型数值(因为题干所给的答案都是比较int型)
    10000001(原码) 对应的反码为1111 1110

又补码等于反码+1
即1111 1111 该二进制转换int型刚好是-127(1+2+4+8+16+32+64)
普及一下:正数原码,反码,补码相同
负数反码除了符号位不变,其他位取反,补码=反码+1;

  1. threadlocalmap使用开放定址法解决hash冲突,hashmap使用链地址法解决hash冲突
    开放寻址发:https://cloud.tencent.com/developer/article/1361248

  2. java.exe/javadoc.exe/jdb.exe/javaprof.exe
    java.exe是java虚拟机
    javadoc.exe用来制作java文档
    jdb.exe是java的调试器
    javaprof,exe是剖析工具

  3. 修饰范围
    牛客刷题第二弹_第4张图片

  4. is-a:继承关系 has-a:从属关系 like-a:组合关系

  5. CMS收集器是一种以获取最短回收停顿时间为目标的收集器,它是基于标记清除算法实现的,它的运作过程相对于其他收集器来说要更复杂一些,整个过程分为四个步骤,包括:初始标记、并发标记、重新标记、并发清除。其中初始标记、重新标记这两个步骤需要暂停整个JVM。
    初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。
    并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行。
    重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间通常会比初始标记阶段稍长一些,但也远比并发标记阶段的时间短。
    并发清除阶段,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的。
    示意图如下:
    牛客刷题第二弹_第5张图片

  6. 识别合法的构造方法;
    1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
    重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。
    2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
    3 子类通过super关键字调用父类的一个构造方法;
    4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法
    5 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰
    6 构造方法不是类的成员方法;
    7 构造方法不能被继承。

  7. 异常的继承关系
    牛客刷题第二弹_第6张图片

  8. 访问权限控制从最大权限到最小权限依次为:public > protected> 包访问权限 > private

  9. JDBC提供两套接口,一个面向数据库厂商,一个面向JDBC使用者。

你可能感兴趣的:(JAVA,Java基础,java)