牛客网错题2

####################################################################

Webservice是跨平台,跨语言的远程调用技术;

它的通信机制实质就是xml数据交换;
它采用了soap协议(简单对象协议)进行通信

###################################################################

CopyOnWriteArrayList适用于写少读多的并发场景

ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,

读与读之间可以并发执行。在读多写少的情况下可以提高效率

ConcurrentHashMap是同步的HashMap,读写都加锁

volatile只保证多线程操作的可见性,不保证原子性,只保证线程在“加载数据阶段”加载的数据是最新的,并不能保证线程安全。

一个线程执行的过程有三个阶段:

加载(复制)主存数据到操作栈 -->  对操作栈数据进行修改  --> 将操作栈数据写回主存

volatite关键字,让编译器不去优化代码使用缓存等,以保证线程在“加载数据阶段”加载的数据都是最新的

####################################################################

Java表达式转型规则由低到高转换

1、所有的byte,short,char型的值将被提升为int型;

2、如果有一个操作数是long型,计算结果是long型;

3、如果有一个操作数是float型,计算结果是float型;

4、如果有一个操作数是double型,计算结果是double型;

5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。

##############################################################################

1.子父类存在同名成员时,子类中默认访问子类的成员,可通过super指定访问父类的成员,格式:super.xx  (注:xx是成员名);

2.创建子类对象时,默认会调用父类的无参构造方法,可通过super指定调用父类其他构造方法,格式:s uper(yy) (注:yy是父类构造方法需要传递的参数)

#################################################################################

sleep和wait的区别有:
  1,这两个方法来自不同的类分别是Thread和Object
  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法。
  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用
   synchronized(x){
      x.notify()
     //或者wait()
   }
   4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

####################################################################################

运行命令是 java + 你的 Java 程序的名字但是不加后缀

javac 是编译命令,后跟 你的 Java 程序名字加后缀

 JVM (Java 虚拟机)运行的是编译后的字节码文件(以.class为后缀的文件)

#####################################################################################

常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。

################################################################################

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC只是将分管不同功能的逻辑代码进行了隔离,增强了可维护和可扩展性,增强代码复用性,因此可以减少代码重复。但是不保证减少代码量,多层次的调用模式还有可能增加代码量

########################################################################

 

a = Integer.parseInt("1024");

b = Integer.valueOf("1024").intValue();

intValue()是把Integer对象类型变成int的基础数据类型; 
parseInt()是把String 变成int的基础数据类型; 
Valueof()是把String 转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。)

a和b都是整数类型变量并且它们的值相等。

#######################################################################

Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。

将字符串S以其自身编码方式分解为字节数组,再将字节数组以你想要输出的编码方式重新编码为字符串。

例:String newUTF8Str = new String(oldGBKStr.getBytes("GBK"), "UTF8");

Java虚拟机中通常使用UTF-16的方式保存一个字符

ResourceBundle能够依据Local的不同,选择性的读取与Local对应后缀的properties文件,以达到国际化的目的。

######################################################################

1 基本类型和基本类型变量被当作参数传递给方法时,是值传递。

在方法实体中,无法给原变量重新赋值,也无法改变它的值。

2 对象和引用型变量被当作参数传递给方法时,是引用传递。

在方法实体中,无法给原变量重新赋值,但是可以改变它所指向对象的属性。

#########################################################################

 java中"包"的引入的主要原因是java本身跨平台特性的需求。实现跨平台的是JVM。

java中并无#include关键字, 如果想在另一个类里面引用包里面的类,要把名字写全。(相当用文件的绝对路径访问)或者用import导入。

#########################################################################

( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。

( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public)。

( 3 ) 因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。

########################################################################

鲁棒性(Robust,即健壮性)
Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生 的错误。通过集成的面向对象的例外处理机制,在编译时,Java揭示出可能出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外, Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。

#######################################################################

public class testtre {
	public static void main(String args[]) {
		Integer var1 = new Integer(1);
		Integer var2 = var1;
		dosomething(var2);
		System.out.println(var1.intValue());
		System.out.println(var1==var2);

	}
	public static void dosomething(Integer i) {
		i = new Integer(2);
	}
}

关于这题,需要把握的是引用类型的实参向形参的传递,只是传递的引用,而不是传递的对象本身;

一开始创建新的对象,var1引用付给了Ingeger 1,然后var2 =var1,把var1的引用给了var2,然后调用dosomething,这个函数的形参是Integer,这里的实参是var2,因此把var2的引用给了integer,相当于integer = var2,那么就相当于在va1和var2下再开辟 一个integer,引用指向integer 1,然后在函数里,把integer的引用给了一个新的对象,简单俩说,函数的调用过程如下:

在调用参数那里把实参var2的引用给了形参integer,在函数里,把integer的引用给了一个新的对象;

#########################################################################

###############################################################

Servlet基本结构的源码解析 - 喻红叶 - CSDN博客  https://blog.csdn.net/yuhongye111/article/details/38946909

######################################################################################

重载就是一句话:同名不同参,返回值无关。

覆盖/重写:同名同参

##########################################################################################

public class Base
{
    private String baseName = "base";
    public Base()
    {
        callName();
    }
 
    public void callName()
    {
        System. out. println(baseName);
    }
 
    static class Sub extends Base
    {
        private String baseName = "sub";
        public void callName()
        {
            System. out. println (baseName) ;
        }
    }
    public static void main(String[] args)
    {
        Base b = new Sub();
    }
}

首先,需要明白类的加载顺序

(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)

(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )

(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )

(4) 父类构造函数

(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )

(6) 子类构造函数

其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)

2.其次,需要理解子类覆盖父类方法的问题,也就是方法重写实现多态问题。

Base b = new Sub();它为多态的一种表现形式,声明是Base,实现是Sub类, 理解为 b 编译时表现为Base类特性,运行时表现为Sub类特性。

当子类覆盖了父类的方法后,意思是父类的方法已经被重写,题中 父类初始化调用的方法为子类实现的方法,子类实现的方法中调用的baseName为子类中的私有属性。

由1.可知,此时只执行到步骤4.,子类非静态代码块和初始化步骤还没有到,子类中的baseName还没有被初始化。所以此时 baseName为空。 所以为null。

######################################################################################
 

抛InterruptedException的代表方法有:

  • java.lang.Object 类的 wait 方法

  • java.lang.Thread 类的 sleep 方法

  • java.lang.Thread 类的 join 方法

########################################################################################

java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面

java.lang: 提供java编成语言的程序设计的基础类

java.io:  包含提供多种输出输入功能的类,
java.net:  包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET,
java.applet: 包含java小应用程序的类
java.util:  包含一些实用性的类

########################################################################################

在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。如果将父类放在前面的话,异常将被父类完全捕获,子类永远不能捕获异常

#########################################################################################

s( Single-Resposibility Principle ): 单一职责原则

o( Open-Closed principle ): 开放封闭原则

l( Liskov-Substituion Principle ): 里氏原则

i( Interface-Segregation Principle ): 接口隔离原则

d( Dependecy-Inversion Principle ): 依赖倒置原则

一个单词:立方体(solid),很好记!!!五个基本原则: 
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。 
开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。 
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。 
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。 
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口

####################################################################################

<<表示左移位

>>表示带符号右移位

>>>表示无符号右移

####################################################################################

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值