赞
踩
多态是同一种方法的不同表现形式,具体的实现方式有继承,接口和泛型
类型擦除是对于泛型来说的,java泛型是在编辑器层次实现的,在生成字节码的时候不带有类型信息,使用泛型时加上类型参数,编译时又去掉,这个过程叫做类型擦除。
Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。
所有的变量都存储在主内存,每个线程都拥有自己的内存,存储着从主存拷贝的自己需要的变量,不同线程之间不能访问别人的内存空间,也不能直接访问主存,而JVM负责线程内存和主存之间的联系。
这个我根据以前的理解,线程死锁就是类似于X和Y两个变量,两个线程各枷锁了一个,导致互相等待,死锁避免的方法是二阶段加锁和解锁。
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
synchronized 关键字声明的方法同一时间只能被一个线程访问。
wait/notify 等待
线程A执行到lock.wait()时,会释放锁,并将当前线程状态设置为WAITING状态,线程B获得锁,当执行到lock.notify()时,会通知所有等待队列中的线程,然后继续执行lock.notify()之后的代码,执行完成之后释放锁。
Volatile 内存共享
CountDownLatch 并发工具
CyclicBarrier 并发工具
具体参考https://www.cnblogs.com/linyufeng/p/9671844.html
类加载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件,在java中类装载器把一个类装入JVM,经过以下步骤:
1、加载:查找和导入Class文件
2、链接:其中解析步骤是可以选择的 (a)检查:检查载入的class文件数据的正确性 (b)准备:给类的静态变量分配存储空间 (c)解析:将符号引用转成直接引用
3、初始化:对静态变量,静态代码块执行初始化工作
先来先服务
短进程优先
最短剩余时间优先(SRT是针对SPN增加了抢占机制的版本,就好比例子中B运行时间非常长,在这期间其他所有的进程都在等待,如果将其中断,先处理所需时间少的,运行效率会有显著提升。一定要先明确SRT是抢占的。)
优先权调度
基于时间片的轮转法(进程会被丢到队列里,当用过时间片之后就排到队尾)
多级反馈队列调度(存在多个队列,优先级从高到低,时间片从大到小,在高优先级队列执行完之后加入低优先级队列)
treeset底层是红黑树实现的,利用自然排序或比较器实现排序。
treemap底层是基于key进行compartor接口的比较函数实现的,内部是红黑树。
where可以使用数据库里所有的字段,having使用的是选择投影出来的属性,并且having不能使用and和or连接条件。
这个感觉各个地方讲的都不一样,我按我老师讲的,关系型数据库索引分为树索引和哈希索引。
可以说说两种索引的区别
树索引具体是使用B+TREE
此外有主索引和二级索引的访问方式。
DNS(Domain Name System)协议为互联网提供域名和IP地址对应的相互映射查询服务。而DNS服务器作为存储域名IP对应信息的分布式数据库为整个互联网提供基础服务。
DNS请求报文和响应报文
dns = DNS(id=1, qr=0, opcode=0, tc=0, rd=1, qdcount=1, ancount=0, nscount=0, arcount=1)
dns.qd = DNSQR(qname=qdname, qtype=255, qclass=1)
dns.ar = DNSRROPT(type='OPT', rclass=4096)
对于标志位:
根据我构造的dns数据包可以看出
0 标准查询 (QUERY)
1 反向查询 (IQUERY)
2 服务器状态查询 (STATUS)
3 无
4 为通知 (Notify)
5 为更新 (Update)
6-15 保留值,暂时未使用
0 为不期望进行递归查询
1 为期望进行递归查询 (从域名服务器进行递归查询)
这里太多了,,,记不住,我就记三个,0是没错误,1是报文格式错误,2是服务器失败。
0 正常,没有差错。 1 报文格式错误(Format error) - NS服务器不能解析请求的报文。 2 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求。 3 名字差错(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在(请求中的地址并不存在)。 4 没有实现(Not Implemented) - NS域名服务器不支持查询类型。 5 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答。比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zone transfer)。 6 为域名出现了但是他不该出现 7 为集合 RR 存在但是他不该存在 8 为集合 RR 不存在但是他应该存在 9 为服务器并不是这个区域的权威服务器 10 为该名称并不包含在区域中 11-15 保留值,暂时未使用。 16 为错误的 OPT 版本或者 TSIG 签名无效 17 为无法识别的密钥 18 为签名不在时间范围内 19 为错误的 TKEY 模式 20 为重复的密钥名称 21 为该算法不支持 22 为错误的截断 23 - 3840 保留 3841 - 4095 私人使用 4096 - 65534 保留 65535 RFC 6195
最后多余的几个字段是
对于dns查询包,回答记录数,权威数和附加数都是0;
对于查询正文
DNSQR(qname=qdname, qtype=255, qclass=1)
这部分只有三个内容,分别是查询名、查询类型和查询类
其中qname一般是域名,qtype是多个值,0表示查询对应的IPV4地址,255表示查询所有信息,15是邮件记录,28是IPV6地址,12表示是IP对应的域名反向查询。
此外由于DNS回应最大只有512字节,超过的就用TCP传输,于是就出现了EDNS,通过修改附加记录数为1,再增加附加内容。使得dns数据包增加了OPT RR字段,成为EDNS包。
dns.ar = DNSRROPT(type='OPT', rclass=4096)
EDNS包含如下:
TYPE固定是OPT,CLASS是回应数据包的最大字节数,TTL包含三个字段
(因为电脑配置渣渣,打开一次太慢,就不抓包截图了)
Object类是类层次结构的根类。是对象工具类,它里面的的方法都是用来操作对象的。每个类都使用 Object 作为超类。每个类都继承Object类的方法。
作用:传递任何数据类型的类供使用;
方法:
1.1 getClass();
该方法是final的,返回此 Object 的运行时类。
1.2 hashCode();
返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
1.3 equals();
比较两个对象是否相等,默认比较的是对象的引用是否相同。实际上都会重写该方法去比较属性等。
1.4 clone();
方法是protect类型,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
深浅克隆的区别就是对于克隆对象中的非静态引用类型的处理: 浅克隆不会新增引用对象, 而深克隆则会连引用对象都会克隆一份;
1.5 toString();
返回该对象的字符串表示,该字符串内容就是对象类型+@+内存地址值,该方法一般都会被重写。
其中比较特殊的三个
还有上边说的TreeMap。
队列详解:
我用过的只有两种非阻塞队列,priorityqueue和linkedlist。
五个队列所提供的各有不同:
* ArrayBlockingQueue :一个由数组支持的有界队列。
* LinkedBlockingQueue :一个由链接节点支持的可选有界队列。
* PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列。
* DelayQueue :一个由优先级堆支持的、基于时间的调度队列。
* SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。