有趣的知识(Linux,JAVA,正则等琐碎的知识)

  1. Unicode 汉字占2B
  2. Utf-8 汉字占3B
  3. 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. “ +”
    所以代表的是匹配加号(+)之前的正则表达式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);
  1. 302状态码:请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求.一般用于重定向时,服务器向浏览器返回302.(学习SpringMVC时使用重定向时遇到)

java

jvm

  1. 逃逸分析
  2. Java在运行时,jvm会将生成的字节码转化为机器可以识别的指令,在这转化过程中是会大大延缓运行速度的,那么jvm会对其进行优化—JIT(即时编译)
    JIT的作用
    1. 缓存:会对频繁使用的代码块和方法进行存储,放标调用.类似于计算机组成原理中内存和CPU之间的Cache的作用.
    2. 代码编译优化(包含逃逸分析)
  3. 例如下面的例子
public void fun(){
	Strudent stu = new Student();//没有逃逸
}
public Student fun1(){
	Strudent stu = new Student();//没有逃逸
	return syu;//对象逃逸了.
}
  1. 利用逃逸分析,编译器可以对代码做如下的优化:
    1. 同步省略
      在 JIT 编译过程中,如果发现一个对象不会被多线程访问,那么针对这个对象的同步措施就可以省略掉,即「锁销除」。例如 Vector 和 StringBuffer 这样的类,它们中的很多方法都是有锁的,当某个对象确定是线程安全的情况下,JIT编译器会在编译这段代码时进行锁销除来提升效率。
    2. 标量替换
      标量:指无法在分解成的更小粒度的数据.例如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 查看当前系统的线程运行情况。

  1. 有时候在一个目录下创建文件,显示No space on left使用df -h查看文件还有,可能是因为改分区下的iNode节点号已经使用完了.
  2. 有时候删除一个大文件之后再去查看存储发现并没有用变化,可能是因为删除的文件还在打开中,使用lsof | grep delete,可以查看到被删除的文件还被打开中.删除大文件的正确做法:cat dev/null > 要删除的大文件
  3. lsof:lsof(list open files)是一个列出当前系统打开文件的工具。
    1. 在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统
  4. linux下删除正在运行的程序文件,不会有任何影响。
    因为:Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。i_count:当前文件使用者(或被调用)的数量,i_nlink:介质连接的数量(硬链接的数量)
  5. fuser -uv filname,查看谁正在打开该文件----这也是查看i_count的方法
  6. dudfhttps://juejin.cn/post/6844903807697027085
  7. 为什什目录不能创建硬连接但是他的硬链接数显示为2?答.他一创建就是2,他内部有一个.文件
  8. 使用ps -aux查看某个执行程序的详细地址,但没有,可以先找到他的进程号然后进入proc目录下的进程号文件,通过查看里面的exe软连接的路径,就可以找到对应程序的详细地址。进入其中的fd文件可以查看到这个程序打开的文件在这里插入图片描述
  9. 操作文件权限的命令是文件系统的功能不是os的功能,例如Windows下的fat就没有文件权限管理的功能
  10. 设置系统用户,/sbin/nologin urban是/usr/sbin/nologin 但是也可以/bin/false两个系统这都相同
  11. chown -R mysql.mysql /usr/local/mysql/:当对软连接进行操作时,填写的路径路径最后面没有/的只是改变软连接的权限,不会改变对应的目录下文件的权限.
  12. 全局配置文件一般在etc目录下,例如bashrc, passwd,shadow。
  13. 运行级别的查看:方式一:runlevelcat /etc/inittab
  14. 在shell中,可以使用export修改当前进程的环境变量。例如:export PATH=.:$PATH.就可以将当前路径加入可执行文件查找路径中
  15. jobs查看后台进程.
  16. 任何选项只要在命令后跟上--表示命令选项的结束:例如touch -a会报错,但是touch -- -a

VI

  1. 在vi中只有在函数上按住shift+v就可以调到对于函数的man手册中.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值