编程语言 Java中的volatile关键字原理 概述 在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题,被volatile关键字修饰的变量(类的成员变量、类的静态成员变量),具有了可见性、有序性,但是不能保证原子性。volatile关键字保证了多线程间的可见性。被volatile修饰的变量的读取和修改特征: yuziyue 5 Aug 2023 · 4 min read
编程语言 Scala 编程之类与对象 Scala 编程之类与对象 主构造函数:其实就是把类成员初始化 辅助构造函数:额外的构造函数,每个辅助构造方法都必须首先调用另一个构造方法(另一个辅助方法 或者 主构造方法)。在 Java 类中,构造方法要么调用同一个类的另一个构造方法,要么直接调用超类的构造方法。而在 Scala 类中,只有主构造方法可以调用超类的构造方法。 yuziyue 5 Aug 2023 · 4 min read
编程语言 scala没有break关键字怎么办 scala.util.control 包的 Break 类给出了一个 break 方法,可以被用来退出包含它的用breakable标记的代码块。Break类实现的break的方法是抛出一个异常,然后由外围的breakable的方法的应用所捕获,因此对break的调用并不需要跟 breakable 的调用放在同一个方法内。 yuziyue 5 Aug 2023 · 1 min read
编程语言 Scala 中下划线用法总结 Scala 中下划线用法总结 导入通配符 *号在Java中是导入通配符,但是在Scala中是合法的方法名,所以导入包时要使用_代替。类成员默认值 Java中类成员可以不赋初始值,编译器会自动帮你设置一个合适的初始值,而在Scala中必须要显式指定,可以用 _ 让编译器自动帮你设置初始值,注意: 该语法只适用于类成员,而不适用于局部变量。可变参数 yuziyue 5 Aug 2023 · 3 min read
编程语言 Java 之字符串处理方法总结 在Java中,String是一个引用类型,它本身也是一个class,实际上字符串在String内部是通过一个char[]数组表示的 字符串编码转换 在Java中,char类型实际上就是两个字节的Unicode编码。如果我们要手动把字符串转换成其他编码,可以如下这样做。注意:转换编码后,就不再是char类型,而是byte类型表示的数组。 yuziyue 5 Aug 2023 · 3 min read
编程语言 JAVA 文件操作原理与实战总结 字节流 IO流以byte(字节)为最小单位,因此也称为字节流。 比如,我们要从磁盘读入一个文件,包含6个字节,就相当于读入了6个字节的数据,这6个字节是按顺序读入的,所以是输入字节流。反过来,我们把6个字节从内存写入磁盘文件,就是输出字节流。在Java中,InputStream代表输入字流,OuputStream代表输出字节流,这是最基本的两种IO流。 字节流抽象类:InputStream/OutputStream yuziyue 3 Aug 2023 · 12 min read
编程语言 Java 之惰性计算 stream 总结 Java从8开始,不但引入了Lambda表达式,还引入了一个全新的流式API:Stream API。它位于java.util.stream包中。这个Stream不同于java.io的InputStream和OutputStream,它代表的是任意Java对象的序列,它类似Python中的迭代器。创建Stream最简单的方式是直接用Stream.of()静态方法,传入可变参数即创建了 yuziyue 3 Aug 2023 · 10 min read
编程语言 Java 反射原理与实际使用场景 加载的流程 class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。Java的所有类都是一个叫做Class的类的一个实例,Class类大概如下所示。每加载一种class,JVM就为其创建一个Class类型的实例,并关联起来。注意:这里的Class类型是一个名叫Class的class。 yuziyue 2 Aug 2023 · 5 min read
编程语言 Java 泛型机制理解与实践 泛型就是定义一种模板,例如ArrayList,然后在代码中为用到的类创建对应的ArrayList<类型>,在Java标准库中的ArrayList实现了List接口,它可以向上转型为List ,Java泛型的主要目的是实现代码的重用性和类型安全性。假如没有泛型,我们可能就会定义很多遍ArrayList了,比如 ArrayList 、ArrayList 、ArrayList 等等。 yuziyue 2 Aug 2023 · 4 min read
编程语言 Python 实现 linux 命令 tail Python 实现 linux 命令 tail ,在某些场景需要实时读取文件的新增内容,使用linux的命令行tail不是很容易操作,所有有了python版本的tail,方便直接加入到脚本。自定义处理函数 同时还可以指定从文件开头,还是文件末尾读取,以及读取的间隔时间。t = tail.Tail("/tmp/able") yuziyue 30 Jul 2023 · 2 min read
编程语言 linux 命令 exec 到底有什么作用 我们在看别人写的脚步时,你可能会发现别人启动程序时喜欢在命令前面添加一个 exec 命令,它的作用其实是:将当前的 shell 进程替换为指定的命令或程序,这意味着原来的 shell 进程将被终止,并且执行的命令将在新的 shell 进程中运行。 这样做的好处在于可以在不创建新的子进程的情况下,直接在当前 shell 进程中执行指定的命令,从而节省了系统资源并且能够更高效地执行命令。 yuziyue 30 Jul 2023 · 2 min read
编程语言 bash 中ctrl+c ctrlc ctrl c清理工作 bash 中ctrl+c ctrlc ctrl c清理工作 bash 脚本有时候按 ctrl+c 以后需要做清理工作,可以自定义 ctrl + c 以后的处理逻辑。运行上面的脚本,当按ctrl c以后,会运行 ctrl_c 函数,然后才退出程序。 echo "cleaning..." echo " Bye!" yuziyue 30 Jul 2023 · 1 min read
编程语言 Java 面向对象知识点梳理 一个 .java 文件只能包含一个public类,但可以包含多个非public类。如果有public类,文件名必须和public类的名字相同。 如果不确定是否需要public,就不声明为public,即尽可能少地暴露对外的字段和方法。 创建新对象时,优先选用静态工厂方法而不是new操作符。 定义为public的class、interface,可以被当前包,其他包的任何类访问。 yuziyue 27 Jul 2023 · 20 min read
编程语言 python与bash用法比较 字符串startswith和endswith,字符串contains包含,按行读取文件内容,字符串split拆分,数组追加元素,${#arr[@]}表示当前数组的长度 arr=() arr[${#arr[@]}]=element1 arr[${#arr[@]}]=element2 arr[${#arr[@]}]=element3 yuziyue 27 Jul 2023 · 1 min read
编程语言 linux shell 脚本 set 命令辅助 set -o errexit 同set -e,如果脚本遇到任何错误,脚本将立即退出执行。没有使用时,脚本即使遇到错误也可以继续执行下去。set -o pipefail 需配合set -o errexit使用,表示脚本中的多管道命令运行时,如果有一个命令出现错误,脚本将会立即退出执行。 yuziyue 27 Jul 2023 · 3 min read
编程语言 linux shell 编程超详细总结 shell 脚本,也就是将想要执行的命令按顺序保存到一个文本文件中,根据需要给予一定的执行流程控制,然后给出解释器路径和可执行权限,这就是一个完整的 shell脚本了。使用当前 shell 执行,不需要执行权限,在该脚本中的变量会保存在当前 shell 中,用echo $variablename可以查看,与source和.的效果相同。 yuziyue 27 Jul 2023 · 14 min read
编程语言 Python字典的所有用法整理 OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候, 它会被放到链表的尾部。可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。 defaultdict 的一个特征是它会自动初始化每个key 刚开始对应的值。 yuziyue 26 Jul 2023 · 5 min read
编程语言 Python 实现经典排序算法 将顺序存储的 n 个待排序记录划分为两个区间:一个有序区间,一个无序区间;初始时有序区间为 [R1],无序区间为 [R2...Rn],令 i 指向无序区中第一个元素,初始值 i=1。 当 i<=n 时重复指向: 将当前无序区中的第一个记录Ri插入到有序区的适当位置,使得有序区变为一个新的有序区。 yuziyue 22 Jul 2023 · 15 min read