Java语言小结
Java程序初始化顺序:
父类的静态代码块
子类的静态代码块
父类的普通代码块
父类的构造方法
子类的普通代码块
子类的构造方法
程序计数器的内存空间是线程私有
并且程序计数器是jvm虚拟机规范中唯一一个没有规定 OutOfMemoryError 异常 的区域;
java虚拟机栈:线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。
没有类信息,类信息是在方法区中
.java堆:对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组
方法区:属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
小型机,一般认为,传统小型机是指采用RISC、MIPS等专用处理器,主要支持UNIX操作系统的封闭、专用的计算机系统,所以又称RISC服务器或Unix服务器。性能比大型机要差,比PC机要好。
SAS是希捷研发出来用于替代SCSI的接口、它的标准是300MB/s或者3G/s 而SATA最高只能达到150MB/s SATA-II将传输速率提高到300MB/s才更接近SAS,但SAS由于价格昂贵未大量发行。而NL-SAS是SAS的磁盘接口和SATA的盘体的综合体
IDE的速率现在是33.3MB/s(不过IDE类型的接口已经很老了 现在用的多的是IDE的分支 比如ATA)
SCSI和SATA不太好比【我的知识水平还不能比较他们】 但是对于这题来说 SAS最快 NL-SAS第二 IDE最慢
华为同时承诺:将公司对网络和业务安全性保障的责任置于公司的商业利益之上
shell中可以通过一行执行多个命令。有以下三种方式:
1、多个命令通过分号;隔离,表示所分隔的命令会连续的执行下去,就算是错误的命令也会继续执行后面的命令
2、多个命令通过&&隔离,表示命令也会一直执行下去,但是中间有错误的命令存在就不会执行后面的命令,没错就直行至完为止。
3、多个命令通过||隔离,表示一遇到可以执行成功的命令就会停止执行后面的命令,而不管后面的命令是否正确与否。如果执行到错误的命令就是继续执行后一个命令,一直执行到遇到正确的命令为止
正则表达式
描述字符的符号:
[abcde] : a/b/c/d/e 中的任意一个字符
[^abcde]: 除了 a/b/c/d/e 之外的任意一个字符
[a-z] : 所有小写字母
[A-Z] : 所有的大写字母
[0-9] : 所有的数字
[a-zA-Z0-9]:所有的大小写字母 和 数字
[a-z&&[^abc]] : 所有小写字母中除了a/b/c的字符
[0-9&&[^0]] :所有数字中除了0
快捷字符描述:
. : 任意一个字符
\d : 任意数字 ,与 [0-9]效果一致
\D : 任意非数字 ,与 [^0-9]效果一致
\s : 所有的空白字符 \n\t\f\r\X0B等等
\w : 所有的大小写字母 和 数字 与[a-zA-Z0-9]效果一致
\W : 相当于[^\w]
Tips : 以上\x均代表一个字符!!
数量符号:
x? : 0 或 1个 x
x* : 0 或 任意个x
x+ : 表示1个或以上个x
x{n} : n表示数字, 描述的是n个x
x{n,} : 至少n个数字
x{n,m} : 表示至少n个x 最多m个x
特殊符号:
&& : 与
| : 或
\ : 转义符号 , 例如: .在正则表达式总具备特殊案例, 如果需要匹配.字符 ,则需要使用\.
n&(n-1)作用:将n的二进制表示中的最低位为1的改为0;
因此,n > 0 && ((n & (n - 1)) == 0 )才是判断 n 是否为偶数
首先,拓扑排序是指对于一个有向无环图G,将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。那么,假设存在回路,v1,v2,v3,……,vn,v1,则边<v1,v2>∈E(G),故v1在v2之前,类似地,v2在v3之前,……,因此,得出,v1在vn之前。又因为<vn,v1>∈E(G),即vn在v1之前。相互矛盾,所以假设不成立。所以,一个图能够进行拓扑排序的一个必要条件就是图中不存在环。
Arraylist在末尾进行增删的时候,内部数组下标不会发生改变,而在最前端进行删除或者增加的时候,会改变后面的下标位置(或是都向前移动,或者都向后移动),这个过程是非常耗费资源的!
Linux系统的优势有:多用户多任务,使用者与群组的规划
稳定、高效和安全
哈夫曼树一定是完全二叉树
哈夫曼树一定是平衡二叉树
哈夫曼树中左孩子节点小于父节点,右孩子节点大于父节点
关于传值和传引用
call by value 不会改变实际参数的数值
call by reference 不能改变实际参数的参考地址
call by reference 能改变实际参数的内容
java集合有哪些?他们的继承关系?
list列表
quese队列
set集合
map映射
list,set,map分别有哪些实现类?
list中的是ArrayList,LinkedList,Vector
set中的是Hashset,Treeset,LinkedHashset
map中的是Hashmap,hashtable TreeMap
TCP/IP协议 三次握手四次断开
简单就是:请求,确认,连接
客户端 —> 服务器,客户端请求连接
服务器 —> 客户端,服务器确认连接信息
客户端 —> 服务器,客户端确认连接信息,开始连接
A —> B,A请求断开连接
B —> A,B确认请求并准备断开连接
B —> A,B关闭连接并通知A
A —> B,A确认关闭
=============================================================spring=============================================================
注解
@Resource和@Autowired的区别:
相同点:都是用来自动装配的,都可以放在属性字段上
不同点:@Autowired 通过bytype的方式实现,而且必须要求这个对象存在!【常用】
@Resource 默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果俩个都找不到的情况下,就报错!【常用】
执行顺序不同:@Autowired 通过bytype的方式实现。
@Resource 默认通过byname的方式实现。
Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
这个注解@Componen说明这个类被spring接管了,也就是说注册到了容器中
spring中方法名就是Bean的名字
UserDao 接口
UserDaoImpl 实现类
UserService 业务接口
UserServiceImpl 业务实现类
所有的类都要装配到Bean里面,所有的Bean都需要容器去取,容器里面取得的Bean拿出来就是一个对象,然后调用这个对象就好了
对象是由Spring创建的
对象的属性是由Spring容器设置的
我们彻底不再需要程序去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的ioc:对象由spring来创建,管理,装配!
InvocationHandler是由代理实例的,调用处理程序实现的接口。每个代理实例都有一个关联的调用程序,当在代理实例上调用方法时,方法调用将编码并派到其调用处理程序的invoke方法。

浙公网安备 33010602011771号