- Unicode 汉字占2B
- Utf-8 汉字占3B
- GBK 汉字占2B,如何确定连着的两个字节是汉字,一个编码的数为1,则会将后面的两个字节当做汉字去解释。读取一个a.txt中的文本,里面只有
以
,当使用java进行读取时,先读取记事本中数字-->gbk------>以---->uniocde>unicode码表中以对应的编码
int a = (int)'以'; //查Unicode进行解码
char b = (char)a;//查Unicode进行编码
System.out.println("a = " + a );
System.out.println("b = " + b);
/*
a = 20197
b = 以
*/
正则表达式
- “ +”
所以代表的是匹配加号(+)之前的正则表达式1次或多次。
例如:
[0-9]+可以匹配一位以上的数字
[A-Z]+可以匹配一位以上的大写英文字符
(ABC)+则可以匹配连续的ABC字符串。
还有上述的
[ab]+和[ab][ab]*等价
"[^a-zA-Z]+"表示匹配连续多个非字母
String str = "12 21 ddd ddddddddddddd d d d d d d d d d d d ddddewe32323````";
String[] split = str.toString().split("[^a-zA-Z]+");
StringBuffer stringBuilder = new StringBuffer();
for(String s :split){
stringBuilder.append(s);
}
System.out.println(stringBuilder);
- 302状态码:请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求.一般用于重定向时,服务器向浏览器返回302.(学习SpringMVC时使用重定向时遇到)
java
jvm
- 逃逸分析
- Java在运行时,jvm会将生成的字节码转化为机器可以识别的指令,在这转化过程中是会大大延缓运行速度的,那么jvm会对其进行优化—JIT(即时编译)
JIT的作用- 缓存:会对频繁使用的代码块和方法进行存储,放标调用.类似于计算机组成原理中内存和CPU之间的Cache的作用.
- 代码编译优化(包含逃逸分析)
- 例如下面的例子
public void fun(){
Strudent stu = new Student();//没有逃逸
}
public Student fun1(){
Strudent stu = new Student();//没有逃逸
return syu;//对象逃逸了.
}
- 利用逃逸分析,编译器可以对代码做如下的优化:
- 同步省略
在 JIT 编译过程中,如果发现一个对象不会被多线程访问,那么针对这个对象的同步措施就可以省略掉,即「锁销除」。例如 Vector 和 StringBuffer 这样的类,它们中的很多方法都是有锁的,当某个对象确定是线程安全的情况下,JIT编译器会在编译这段代码时进行锁销除来提升效率。 - 标量替换
标量:指无法在分解成的更小粒度的数据.例如java中的基本数据类型.
聚合量:可以分解的数据类型.例如java对象
如果经过逃逸分析,发现一个对象不会被其他线程使用,那么会将对象的创建替换成为多个成员变量的创建即标量替换.
例如:
- 同步省略
public class Student{
private String name;
private Integer age;
public Integer getAge(){
return age;
}
}
public static void test(){
Student stu = new Student();
stu.getName();
}
像上面所示,当jvm发现stu没被其他线程所使用.那么JIT动态编译时,不会创建对象stu,而只是创建name和age两个成员变量。
这样就减少了创建对象所需的堆内存.而且也不需要jvm进行垃圾收集了(GC)
4. 栈上分配
java中的栈和堆:
其中堆是所有线程共享的一块内存,几乎所有对象的分配都在这块内存中。而栈则是线程自己私有的,只存储线程自己的局部变量等信息。每个线程都有自己的栈,栈信息无法在线程之间共享。也就是对象放在堆上,而指向对象的引用(指针)放在栈中.那么当对象比较小时可以直接将对象放在栈上.(一种优化)
java语法
java中创建对象的方式
- 构造器
- 反射
- 克隆(Cloneable)
- 反序列化(Serializable)
Linux
ps aux 相当于打开windows的资源管理器。
ps -el 查看当前系统的进程运行情况。
ps -eLf 查看当前系统的线程运行情况。
- 有时候在一个目录下创建文件,显示
No space on left
使用df -h
查看文件还有,可能是因为改分区下的iNode节点号已经使用完了. - 有时候删除一个大文件之后再去查看存储发现并没有用变化,可能是因为删除的文件还在打开中,使用
lsof | grep delete
,可以查看到被删除的文件还被打开中.删除大文件的正确做法:cat dev/null > 要删除的大文件
lsof
:lsof(list open files)是一个列出当前系统打开文件的工具。- 在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统
- linux下删除正在运行的程序文件,不会有任何影响。
因为:Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。i_count:当前文件使用者(或被调用)的数量,i_nlink:介质连接的数量(硬链接的数量) fuser -uv filname
,查看谁正在打开该文件----这也是查看i_count
的方法du
和df
:https://juejin.cn/post/6844903807697027085
- 为什什目录不能创建硬连接但是他的硬链接数显示为2?答.他一创建就是2,他内部有一个.文件
- 使用ps -aux查看某个执行程序的详细地址,但没有,可以先找到他的进程号然后进入proc目录下的进程号文件,通过查看里面的exe软连接的路径,就可以找到对应程序的详细地址。进入其中的fd文件可以查看到这个程序打开的文件
- 操作文件权限的命令是文件系统的功能不是os的功能,例如Windows下的fat就没有文件权限管理的功能
- 设置系统用户,/sbin/nologin urban是/usr/sbin/nologin 但是也可以/bin/false两个系统这都相同
chown -R mysql.mysql /usr/local/mysql/
:当对软连接进行操作时,填写的路径路径最后面没有/的只是改变软连接的权限,不会改变对应的目录下文件的权限.- 全局配置文件一般在etc目录下,例如bashrc, passwd,shadow。
- 运行级别的查看:方式一:
runlevel
和cat /etc/inittab
- 在shell中,可以使用export修改当前进程的环境变量。例如:export PATH=.:$PATH.就可以将当前路径加入可执行文件查找路径中
jobs
查看后台进程.- 任何选项只要在命令后跟上
--
表示命令选项的结束:例如touch -a
会报错,但是touch -- -a
VI
- 在vi中只有在函数上按住shift+v就可以调到对于函数的man手册中.