kuky_xs
kuky_xs
通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。 主要有一下四种类加载器 1.启动类加载器:这个类加载器负责放在\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库。用户无法直接使用。 2.扩展类加载器:这个类加载器由sun.misc.Launcher$AppClassLoader实现。它负责\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库。用户可以直接使用。 3.应用程序类加载器:这个类由sun.misc.Launcher$AppClassLoader实现。是ClassLoader中getSystemClassLoader()方法的返回值。它负责用户路径(ClassPath)所指定的类库。用户可以直接使用。如果用户没有自己定义类加载器,默认使用这个。 4.自定义加载器:用户自己定义的类加载器。
计算机通常只有一个CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务.在运行池中,会有多个处于就绪状态的线程在等待CPU,JAVA虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权. 有两种调度模型:分时调度模型和抢占式调度模型。 分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片这个也比较好理解。 java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。
dexopt 是对 dex 文件 进行 verification 和 optimization 的操作,其对 dex 文件的优化结果变成了 odex 文件,这个文件和 dex 文件很像,只是使用了一些优化操作码(譬如优化调用虚拟指令等)。 dex2oat 是对 dex 文件的 AOT 提前编译操作,其需要一个 dex 文件,然后对其进行编译,结果是一个本地可执行的 ELF 文件,可以直接被本地处理器执行。 除此之外 Dalvik 虚拟机中有使用 JIT 编译器,也就是说其也能将程序运行的热点...
基本数据类型,java中提供了8中基本的数据类型。boolean int float等 包装类型:每一个基本的数据类型都会一一对应一个包装类型。 boolean —–>Boolean Int ——–>Integer 装箱和拆箱 装箱:把基本的数据类型转换成对应的包装类型. Integer .valueOf(1) Integer i = 1;自动装箱,实际上在编译时会调用Integer .valueOf方法来装箱 拆箱:就是把包装类型转换为基本数据类型.基本数据类型 名称 = 对应的包装类型。 Integer i = 1; int j = i;//自动拆箱//int j...
服务器端会为每个请求创建一个链接,并向其发送确认报文,然后等待客户端进行确认 (1). DDos 攻击: 客户端向服务端发送请求链接数据包 服务端向客户端发送确认数据包 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认 (2). DDos 预防:(没有彻底根治的办法,除非不使用TCP) 限制同时打开SYN半链接的数目 缩短SYN半链接的Time out 时间 关闭不必要的服务
1. `run` 函数返回值为函数块最后一行,或者指定 return 表达式,如果调用某对象的run函数,在函数块内可以通过 this 指代该对象。返回值为函数块的最后一行或指定 return 表达式。例如 ```kotlin val a = "run".run { println(this) return@run 3 } println(a) ``` 结果为 ``` run 3 ``` 2. `apply` 调用某对象的 apply...
1. 定义:提供一种为程序元素设置元数据的方法,不能直接干扰程序代码的运行,无论增加或删除注解,代码都能够正常运行。 2. 功能: - 作为特定的标记,用于告诉编译器一些信息 - 编译时动态处理,如动态生成代码 - 运行时动态处理,作为额外信息的载体,如得到注解信息 3. 分类: - 标准注解:Override、Deprecated、SuppressWarnings 标准 Annotation 是指 Java 自带的几个 Annotation,上面三个分别表示重写函数,不鼓励使用(有更好方式、使用有风险或已不在维护),忽略某项 Warning; - 元注解:@Retention、@Target、@Inherited、@Documented 用来定义 Annotation 的 Annotation - 自定义注解:自定义 Annotation...
在Java中,有普通集合、同步的集合(即线程安全的集合)、并发集合。 并发集合常见的有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque等。并发集合位于java.util.concurrent包下,是在JDK1.5之后才有的。 普通集合通常性能最高,但是不保证多线程的安全性和并发的可靠性; 线程安全集合仅仅是给集合添加了synchronized(同步的)同步锁,严重影响了性能,而且对并发的效率就更低了; 并发集合通过复杂的策略不仅保证了多线程的安全,又提高了并发时的效率。
异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。 Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了,例如,说内存溢出和线程死锁等系统问题。Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。 java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try..catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try..catch处理或用throws声明,所以系统异常也称为unchecked异常。
提供一种更方便的方法 ```kotlin fun checkSameBoolean(values: MutableList): Boolean { require(values.isNotEmpty()) { "List can't be empty" } val first = values[0] values.filterNot { it == first }.forEach { _ -> return false }...