java知识点回顾

来源:互联网 发布:琼恩 龙母 知乎 编辑:程序博客网 时间:2024/06/05 01:57
1、课程总结1.1、Oracle数据库1.1.1、Oracle-011、  Oracle数据库中的重点的用户:    • 超级管理员:sys/change_on_install;    • 普通用户:scott / tiger,需要进行解锁配置;2、  Oracle中的两个重要服务:    • 监听服务:OracleOraDb11g_home1TNSListener,才可以通过客户端连接访问,例如:程序;    • 数据库的实例服务:oracle提供给用户的只是一个平台,这个平台上可以建立多个数据库,那么每一个数据库都一定要有自己的实例服务,实例服务的命名“OracleServiceSID”。Database Configuration Assistant3、  sqlplus的基础命令:    • 切换用户:conn 用户名/密码 [AS SYSDBA];    • 格式化显示,只是在现阶段有作用;4、  scott中的数据表:dept、emp、salgrade、bonus;5、  对于性能的考虑:    • WHERE使用的判断条件越多,那么性能一定越差,能使用一个条件判断的绝对不要用两个;    • NOT IN与null的关系;6、  已知的SQL语法结构:SELECT [DISTINCT] * | 字段 [别名] , 字段 [别名] , ...                           →   ③、对要显示的数据列控制FROM 数据表 [别名]                                                   →   ①、确定数据来源[WHERE 条件(s)]                                                       →   ②、对数据进行筛选,控制行[ORDER BY 字段 | SELECT别名 [ASC | DESC] , 字段 | SELECT别名 [ASC | DESC] ,..]  →   ④、对数据排序    ORDER BY子句永远放在最后执行,而且是唯一一个可以使用SELECT中定义别名的子句。7、  WHERE的限定判断:    • 关系运算:>、<、>=、<=、=、!=(<>);    • 逻辑运算:AND、OR、NOT;    • 范围运算:BETWEEN...AND;    • 范围运算:IN、NOT NULL;    • 空判断:IS NULL、IS NOT NULL;    • 模糊查询:LIKE。        |- 如果在使用LIKE的时候没有明确的设置具体的查询关键字,那么就表示查询全部;SELECT * FROM 表 WHERE 字段 LIKE '%%' ;SELECT * FROM 表 ;    第二种写法的性能一定要更高。1.1.2、Oracle-021、  单行函数,大家知道有那些功能,用的时候查询文档即可;No. 函数定义    描述1   字符串 UPPER(字符串 | 数据列)    将字符串的内容转为大写字母表示2   字符串 LOWER(字符串 | 数据列)    将字符串的内容转为小写字母表示3   字符串 INITCAP(字符串 | 数据列)  将一个字符串的开头首字母变为大写4   字符串 REPLACE(字符串 | 数据列,旧的内容,新的内容)    使用指定的新数据替换掉旧数据5   整数 LENGTH(字符串 | 数据列)    取得指定字符串或者是数据列的内容的长度6   字符串 SUBSTR(字符串 | 数据列  , 开始索引 [,长度]) 截取指定字符串或者数据列的指定索引范围中的子字符串7   ROUND(数字 | 数据列 [,小数保留位数])   实现四舍五入的操作8   TRUNC(数字 | 数据列 [,小数保留位数])   实现小数截取操作9   MOD(数字 | 数据列 , 数字 | 数据列)    求模(取余数)10  ADD_MONTHS(日期 | 列,数字)   指定日期增加若干个月之后的日期11  MONTHS_BETWEEN(日期|列,日期|列)   计算两个日期之间所经历的月数12  LAST_DAY(日期|列)  求出指定日期的最后一天日期13  NEXT_DAY(日期 | 列,星期X)    取得下一个指定的一周时间数的日期14  字符串 TO_CHAR(数字 | 日期 , 转换格式) 将数字或者是日期按照指定的格式变为字符串数据,转换格式:1、日期格式:年(yyyy)、月(mm)、日(dd)、时(hh)、分(mi)、秒(ss);2、数字格式:任意数字(9)、本地货币(L)15  日期 TO_DATE(字符串,转换格式)    将指定的字符串按照指定的格式变为日期型数据,日期格式:年(yyyy)、月(mm)、日(dd)、时(hh)、分(mi)、秒(ss);16  数字 TO_NUMBER(字符串 | 数据列) 将指定的字符串或者数据列中的内容变为数字17  数据 NVL(列 , 默认值) 如果给定列的内容是null,则使用默认值处理18  DECODE(列 | 数据,判断内容1,显示内容1,判断内容2,显示内容2,...[,默认显示内容]) 将指定的判断内容替换2、  多表查询,对于多表查询的使用原则:    • 在实际的开发过程之中,几乎可以确认的事情就是不要使用直接的多表查询;    • 如果数据量的确小,则可以使用(10%)。    多表查询的本质在于,FROM子句之后可以编写多张数据表,但是所有的多表查询一定会存在笛卡尔积的问题,对于笛卡尔积的消除只能够采用一些关联字段,或者是关联条件完成,但是最终也只是消除了显示的笛卡尔积。3、  分组统计查询:    • 统计函数:COUNT()、MAX()、SUM()、MIN()、AVG();    • 对于分组统计而言,最为关键的部分是一定要确定分组好字段,最简单的确认分组字段的方法就是看这个列上是否存在有重复的数据;    • 分组的规则:    如果不使用GROUP BY,那么SELECT子句只允许出现统计函数;                    如果使用GROUP BY,那么SELECT子句允许出现分组字段与统计函数;                    统计函数允许嵌套使用,那么SELECT子句不允许出现任何字段;    • HAVING与WHERE的对比:        |- WHERE是在分组前使用的,以确定要参与运算的数据;        |- HAVING是在分组后使用的,表示对分组的结果进行筛选。4、  子查询:可以在一个完整的查询里面嵌套若干个子查询,这样就可以通过一个大的查询一次性取得我们所需要的全部数据;    例如:曾经使用过:统计出每个部门的编号、名称、位置、人数、平均工资。        |- 查询出所有部门的基础信息:编号、名称、位置;        |- 查询出所有的统计信息:编号、人数、平均工资。    子查询可以出现在一条查询语句的任意位置之中,最为常见的几种选择的情况:        • WHERE子句:子查询返回单行单列(数值)、单行多列(几乎不用)、多行单列(IN、ANY、ALL);        • HAVING子句:子查询返回单行单列并且要求使用统计函数;        • FROM子句:子查询返回多行多列,以数据表的操作(临时表);        • SELECT子句:行列转置。    EXISTS:这是以子查询中是否有返回结果为前提的判断,如果有结果就是true,否则就是false。        |- 请解释IN与EXISTS的区别:IN是进行数值的依次判断,而EXISTS只是以是否有数据为前提进行判断,不关心具体的数据内容。    对于现在的数据库实际上有两种:        • SQL数据库:关系型数据库;        • No-SQL数据库:不受到ACID的控制;    从性能上来讲No-SQL数据库会更好,而传统的关系型数据库由于需要有这个ACID的概念存在,所以性能相对较低。    所有的数据库的数据都具备四个核心功能:CRUD、增、删、改、查。对于数据的修改操作是最危险的,所以ACID保证的是修改操作的安全性。1.1.3、Oracle-031、  数据的更新操作:    • 增加处理:INSERT INTO 表名称(字段,字段,...) VALUES (值, 值,...);    • 修改处理:UPDATE 表名称 SET 字段=值,字段=值,... WHERE 更新条件(S) & 子查询;    • 删除处理:DELETE FROM 表名称 WHERE 更新条件(S) & 子查询;        |- 在实际开发之中数据不要执行物理删除,只需要执行逻辑删除即可;2、  事务控制:所有的更新操作要么一起成功,要么一起失败;    • 关系型数据库都支持ACID的原则,数据安全性高、性能低;    • 事务的控制命令:COMMIT、ROLLBACK;    • 每一个连接到数据库上的用户都使用一个Session表示;3、  分页操作:ROWNUM;SELECT * FROM (    SELECT 字段 [别名] , 字段 [别名] , .. , ROWNUM rn    FROM 表名称    WHERE ROWNUM<=(currentPage * lineSize)) tempWHERE temp.rn>(currentPage - 1) * lineSize ;4、  数据表的创建:    • 常用数据类型:NUMBER、VARCHAR2、DATE、CLOB;    • 创建数据表:CREATE TABLE 表名称 (列 类型 , 列 类型 , ...);    • 删除数据表:DROP TABLE 表名称 [PURGE | CASCADE CONSTRAINT] ;        |- 清除回收站:PURGE RECYCLEBIN;5、  约束:主键约束、外键约束;    • 如果要想维护约束需要设置约束名称:CONSTRAINT 约束名称 ...;    • 外键约束的规则:        |- 被设置为外键的数据列,在父表之中必须是主键或者是唯一约束;        |- 删除父表之前一定要首先删除对应的子表,删除表操作一般不要出现;        |- 数据的级联操作:            |- ON DELETE CASCADE:级联删除,父表数据删除之后对应的子表数据一起删除;            |- ON DELETE SET NULL:级联更新,父表数据删除之后,对应的子表数据的外键列设置为NULL。6、  第二个查询;1.1.4、Oracle-041、  序列:进行流水号生成处理的;    • 序列的创建语法:CREATE SEQUENCE 序列名称;    • 取得下一个数据:序列.nextval;2、  数据库设计范式:希望大家可以理解,整个的项目开发原则:一对多、多对多。2.1、JavaSE2.1.1、Java SE基础1、  【基本概念】public classclass区别?    • public class:文件名称必须与类名称保持一致,一个*.java文件里面只允许有一个public class,主方法一般都会定义在public class之中,这样的类称为主类;    • class:文件名称可以与类名称不一致,在一个*.java文件里面可以定义多个class类,并且在编译之后会根据不同的class定义产生不同的*.class文件。2、  【基本概念】PATH和CLASSPATH:    • PATH定义的是所有可执行程序路径;    • CLASSPATH定义的是类的加载路径,使用java命令解释一个类的时候使用。3、  在Java之中数据类型一共分为两大类:        • 基本数据类型:            |- 数值型:                |- 整型(整数):byteshortintlong;  →   0                |- 浮点型(小数):floatdouble;        →   0.0            |- 字符型:char;                        →   '\u0000'            |- 布尔型:boolean;                     →   false        • 引用数据类型:            |- 数组、类、接口;                     →   null    对于各种基本数据类型的选择,我给出一些个人的经验:        • 如果要表示整数就使用int,表示小数使用double;        • 如果要表示日期时间或者是内存文件大小的时候使用long(字节单位);        • 如果要进行数据传输、编码转换使用byte;        • 如果要描述逻辑运算,使用boolean。4、  逻辑运算使用“&&”(短路与)、“||”(短路或)两种模式完成;    • 面试题:“&&”和“&”的区别、“||”和“|”的区别。5、  三目运算的语法定义,但是这个运算是以后再使用的;6、  明确知道循环次数的使用for循环,不知道循环次数但是知道循环结束条件的使用while。2.1.2、面向对象-011、  面向对象的三大主要特征:封装、继承、多态;2、  类与对象关系:类是对象的操作模版,而对象是类的实例,类只有通过对象才可以使用;    • 类的定义使用class完成,类中的组成:属性和方法;    • 对象定义时必须设置其所对应的类型,而且类属于引用数据类型,必须使用new开辟堆内存;        |- 声明并实例化对象:类名称 对象名称 = new 类名称();        |- 分步完成:            |- 声明对象:类名称 对象名称 = null,简单理解为在栈内存中声明;            |- 实例化对象:对象名称 = new 类名称(),开辟堆内存,堆内存保存的是对象属性内容;    • 引用传递本质:同一块堆内存被不同的栈内存所指向;    • 垃圾产生原因:没有任何栈内存指向的空间成为垃圾,垃圾被GC定期回收。3private关键字:可以在方法和属性上使用,但是一般99%的情况下都会在属性定义上使用private,使用之后表示定义的属性或方法只能够被本类所访问,定义的private属性在简单Java类中必须要编写setter、getter方法;4、  构造方法:使用关键字new开辟新对象的时候调用一次,其主要目的是为类中的属性初始化;    • 定义要求:方法名称与类名称相同,并且没有返回值声明;    • 任何类中都至少会保留有一个构造方法,如果一个类没有定义任何的构造方法,那么将默认生成一个无参的,什么都不做的构造方法出现;    • 构造方法允许重载,重载时只需要考虑参数的类型及个数即可。5、  匿名对象:没有栈内存指向的对象,匿名对象使用一次之后就可以丢弃;6、  简单Java类开发原则:    • 简单Java类一定是可以描述出某一类事物的定义,所以名称一般都要求有意义;    • 类中的属性必须使用private封装,封装后的全部属性必须提供有setter、getter方法;    • 在类中可以定义任意多个构造方法,但是至少要保留有一个无参构造方法;    • 【其他要求】类中不允许有任何的直接输出,所有要输出的内容返回给被调用处输出;    • 【其他要求】类中应该提供有一个返回对象完整信息的方法,这个不是必须的。7、  数组:数组是一组变量,数组大小一旦声明则不可改变;    • 数组在所有的开发之中一定会使用到,但是不会直接用到数组,而是会间接到概念;    • 数组定义(数据类型 数组名称 [] = new 数据类型 [长度])、for循环输出、“数组名称.length”;    • 面试题:数组排序、数组转置。    • 数组引用传递 = 对象引用传递,你只需要分析好堆栈关系即可;    • 两个数组操作方法:        |- 数组拷贝:System.arraycopy(源数组,源数组开始点,目标数组,目标数组开始点,长度);        |- 数组排序:java.util.Arrays.sort(数组名称) ;8、  对象数组:可以保存一组对象,但是依然受到数组长度的控制;    • 当描述一堆对象的时候使用对象数组,例如:10个学生、20头猪、30只鸡。2.1.3、面向对象-021、  String类,特点:    • 采用直接赋值,可以自动入池,只开辟一块堆内存空间;    • String是一个对象,必须使用equals()比较相等;    • 字符串是一个String的匿名对象,一旦声明则不可改变,String字符串的改变依靠的是引用关系的变化。2、  String类的方法No. 方法名称    类型  描述1   public String(char[] value) 构造  将全部字符数组变为字符串2   public String(char[] value, int offset, int count)  构造  将部分字符数组变为字符串3   public char charAt(int index)   普通  返回指定索引位置上的字符,索引从0开始4   public char[] toCharArray() 普通  将字符串变为字符数组5   public String(byte[] bytes) 构造  将全部的字节数组变为字符串6   public String(byte[] bytes, int offset, int length) 构造  将部分字节数组变为字符串7   public byte[] getBytes()    普通  将字符串变为字节数组,需要传输的时候才会使用8   public byte[] getBytes(String charsetName) throws UnsupportedEncodingException  普通  字符串编码转换9   public boolean equals(String str)   普通  区分大小写的相等比较10  public boolean equalsIgnoreCase(String anotherString)   普通  不区分大小写的相等比较11  public int compareTo(String anotherString)  普通  比较字符串的大小12  public boolean contains(String s)   普通  判断该字符串是否在总字符串中存在,此操作JDK 1.5之后才提供给用户使用13  public int indexOf(String str)  普通  从头查找指定的子字符串位置,如果不存在返回-114  public int indexOf(String str, int fromIndex)   普通  从指定位置查找子字符串的位置,不存在返回-115  public int lastIndexOf(String str)  普通  从尾向前查找子字符串位置,不存在返回-116  public int lastIndexOf(String str, int fromIndex)   普通  从指定位置由后向前查找,不存在返回-117  public boolean startsWith(String prefix)    普通  判断是否以指定的字符串开头18  public boolean startsWith(String prefix, int toffset)   普通  空过若干个字符串之后,判断是否以指定的字符串开头19  public boolean endsWith(String suffix)  普通  判断是否以指定的字符串结尾20  public String substring(int beginIndex) 普通  从指定位置截取到结尾21  public String substring(int beginIndex, int endIndex)   普通  截取指定索引范围内的子字符串22  public String replaceAll(String regex, String replacement)  普通  替换全部23  public String replaceFirst(String regex, String replacement)    普通  替换首个24  public String[] split(String regex) 普通  全部拆分25  public String[] split(String regex, int limit)  普通  拆分为有限个数26  public String concat(String str)    普通  字符串连接,一般使用“+”处理27  public String intern()  普通  将内容保存到对象池之中28  public boolean isEmpty()    普通  判断是否为空字符串,但是不是null29  public int length() 普通  取得字符串长度30  public String toLowerCase() 普通  全部转小写31  public String toUpperCase() 普通  转大写32  public String trim()    普通  去掉左右空格,但是中间保留3、  对象比较:是一个后期的辅助学习概念。// 标准的对象比较是equals(),但是equals()有限制,不要用这个名称 // 所以为了可以暂时完成现在的开发要求,使用compare()代替// String类的:equals定义:public boolean equals(String str);// A类:compare():public boolean compare(A a)// Phone类:compare():public boolean compare(Phone a)class Phone {    private String brand ;    private double price ;    public Phone(String brand,double price) {        this.brand = brand ;        this.price = price ;    }    // setter、getter、无参构造略    public boolean compare(Phone phone) {        // 在本方法会存在有两个实例化对象:this、phone(传的)        if (this == phone) {            return true ;        }        if (phone == null) {            return false ;        }        // 假设有100个属性,每个属性的判断时间为0.1秒,整个过程需要10秒        if (this.brand.equals(phone.brand)             && this.price == phone.price) {            return true ;        }        return false ;    }}public class TestDemo {    public static void main(String args[]) {        Phone pa = new Phone("黑米",1.1) ;        Phone pb = null ;        System.out.println(pa.compare(pb)) ;    }}4、  引用与现实生活的关系匹配。2.1.4、面向对象-031static尽量不要作为我们的设计首选,作为次选;    • 在一个类不希望受到实例化对象控制的情况下使用static声明属性或者是方法;    • 类的核心组成在于:包裹一组信息,所以如果类中没有属性就没有必要使用普通方法;        |- 一个什么都不做的对象有可能会浪费12K的内存空间;    • static属性的内容将是共享数据内容,所有对象都可以修改,这种情况下很少去改;    • static方法不能够访问非static方法,一个类方法不希望受到类对象限制的时候使用。2、  内部类:内部类可以方便的与外部类之间进行私有属性的互访问、内部类破坏程序结构,如果不是必须,不建议使用。    • 内部类往往都是在外部类中进行操作的,很少拿到类的外部去使用;    • 内部类可以定义在方法之中,JDK 1.8之后该内部类可以直接访问方法中定义的参数或变量,但是在JDK 1.8之前,参数或变量前必须使用final定义。3、  简单Java类和数据表的映射,最低要求:一对多关系。给你任意一个数据库,都要求可以灵活转换。2.1.5、面向对象-041、  继承的本质在于:功能的继续加强,同时标准的严格。    • 继承使用的是extends关键字,一个子类只允许继承一个父类;    • 使用extends继承的时候,子类对象实例化前一定要默认调用父类的无参构造;2、  方法的覆写:只要你存在有继承关系,就一定会存在有方法的覆写操作,覆写要求:方法名称、参数类型及个数、返回值都相同,被覆写的方法不能拥有比父类更为严格的访问控制权限,都使用public。3、  不是所有的类都允许被继承,在开发之中被继承的往往都是抽象类;    • 抽象类使用abstract声明,比普通类只多了抽象方法;    • 抽象类必须要有子类,子类要覆写全部抽象方法;    • 抽象类的对象必须依靠子类对象的向上转型实例化;    • 抽象类依然存在有普通属性,所以一定会存在有构造方法,子类对象依然满足先实例化父类对象的流程操作;4、  覆写与对象多态性是相辅相成的:多态的特点是,同一个父类可以使用不同的子类为其实例化,父类的同一个方法,可以根据子类的不同而有不同的实现。abstract class A {    public A() {        System.out.println("**************") ;    }    public abstract void fun() ;}class X extends A { // 单继承局限    public X() {        super() ;        System.out.println("###############") ;    }    public void fun() {        System.out.println("Hello World !") ;    }}public class TestDemo {    public static void main(String args[]) {        A a = new X() ;        a.fun() ;    }}5、  多态性,分为两个部分:    • 方法多态性:重载与覆写;        |- 方法重载:方法名称相同,参数类型及个数不同,同一个方法名称可能根据传入的参数的类型或个数执行不同的方法体,以达到不同的执行效果;        |- 方法覆写:不同的子类针对于同一个父类的方法可以有不同的实现;            |- 依赖的是对象的向上转型;    • 对象的多态性:        |- 向上转型(70%):自动完成,利于操作参数类型的统一;        |- 向下转型(2%):手工完成,需要执行子类的特殊操作;            |- 如果要想发生向下转型必须首先发生向上转型,否则会产生ClassCastException;            |- 使用instanceof可以判断某一个对象是否是某一个类的实例;2.1.6、面向对象-05课程答疑1、  抽象方法所在的类必须是抽象类,接口属于抽象类吗?    接口不属于抽象类,原因有如下几点:        • 接口的定义使用的是interface,而抽象类使用的abstract class;        • 接口中的定义只有全局常量和抽象方法,而抽象类什么都有;        • 接口中的所有权限都属于public,而抽象类可以使用各种权限;        • 接口的子类具备有多继承的特点,一个子类可以实现多个接口,但是抽象类存在有单继承局限。2、  工厂代理模式里面如果需要加入几个判断条件,要怎么添加    工厂类的可用范畴一定是固定的;    现在使用的工厂类并不标准:每增加一个子类就要修改工厂类。3、  工厂的意义是什么?    解耦合,不同层之间依靠接口进行通讯。    在你编写代码的过程之中,如果能够先考虑到接口会更好。4、  能否抽象出当前的房子?5、  匿名内部类6、  基本数据类型自动装箱和拆箱 数据相等比较时范围在(-128~127) 除此之外都是false课程回顾1、  接口的定义:    • 在开发之中接口会作为标准存在,而且接口的子类不受单继承局限;        |- 初期阶段要求以接口的使用为主,后期阶段开始逐步融合抽象类;    • 接口使用interface关键字定义,而接口的子类使用implements实现,一个接口可以使用extends继承多个父接口;    • 工厂设计模式、代理设计模式。2、  Object类:作为参数的统一类型,而且所有的引用类型都可以使用Object接收。    • 方法:toString()、equals(),这两个方法基本上只会在课程讲解中使用。3、  内部类、匿名内部类结构先记住;4、  链表:自求多福。2.1.7、面向对象-061、  宠物商店,包括以下的训练内容:    • 接口的作用,不同层之间依靠接口连接;    • 链表所代替的就是对象数组,链表中的remove()与contains()方法需要equals()支持;2、  包使用package定义,而且只要是类就定义package;    • 不同包的互相导入使用import完成。3、  异常的如何处理需要你自己的经验以及API文档的阅读;    • 基础的捕获:trycatch;    • 异常的处理流程必须清楚,异常出现之后将产生异常类对象,而捕获就是对象的传递;    • RuntimeException:所有的子类不需要强制性要求捕获,可以选择性进行。2.1.8、多线程    理论概念要多于实际。基本上很少能够见到多线程的直接应用。1、  Thread类负责多线程的启动;    • 调用了start()方法相当于调用了run(),牵扯到操作系统的资源调度;2、  实现多线程使用Runnable接口;package cn.mldn.demo;public class TestDemo {    public static void main(String[] args) throws Exception {        new Thread(new Runnable() {            @Override            public void run() {            }        }).start();    }}3、  在Thread类里面存在有一个currentThread()方法,这个方法也很少去调用,需要使用到这个概念来进行以后的学习。2.1.9、常用类库1、  StringBuffer类:append();2、  日期处理类:Date、SimpleDateFormat;3、  比较器:Comparable,跟学习有关,开发法意义不大;4、  ThreadLocal类;5、  正则表达式。2.1.10、Java IO1、  如果需要将读取进来的数据直接输出就使用InputStream与OutputStream的组合;    • OutputStream:public void write(byte[] b, int off, int len) throws IOException;    • InputStream:public int read(byte[] b) throws IOException;2、  程序输出数据使用PrintStream(装饰设计模式),程序读取使用Scanner。3、  对象序列化以后一定会在简单Java类上使用。2.1.11、Java类集1、  可以准确的描述各个接口的作用以及区别,包括子类的区别;2、  Iterator输出List、Set、Map必须掌握;3、  Object类中的hashCode()、equals()与HashSet、remove()、contains()的联系。3、基础面试题3.1、面试题1面试题:请解释“&”和“&&”、“|”和“||”的区别?    • 逻辑运算:        |- 与操作:“&”表示所有的判断条件都要进行判断,“&&”如果前面的判断条件返回的是false,那么后面的判断将不再执行,最终的结果就是false。        |- 或操作:“|”表示所有的判断条件都要进行判断,“||”如果前面的条件返回了true,那么后面的判断将不再进行,最终的结果就是true。    • 位运算:        |- “&”运算表示的有一位是0最终的结果计算为0,只有数据全为1的时候结果才是1。        |- “|”运算只有一位的内容是1,最终的结果就是1,如果全为0,则结果才为0。、4、高级面试题1、  请说出线程池的四种定义形式;    • 线程池在:java.util.concurrent包中定义;    • 使用ExecutorService实现线程池的处理操作;    • Executors可以创建四种线程池:        |- 无大小限制:Executors.newCachedThreadPool()        |- 固定大小:Executors.newFixedThreadPool(3)        |- 单线程池:Executors.newSingleThreadExecutor()        |- 定时调度池:Executors.newScheduledThreadPool(3)2、  JVM内存模型;
0 0
原创粉丝点击