Linux工具-wc
参考文献
wc
1wc -clwm file
-c: 打印字节数
-l: 打印行数
-w: 打印单词总数
-m: 打印字符总数
常用示例
统计当前文件下的文件个数,目录个数
123456789# 统计当前目录下的文件数量(不包含子目录中的文件)ls -l|grep "^-"|wc -l# 统计当前目录下的文件数量(包含子目录中的文件)ls -lR|grep "^-"|wc -l# 统计当前目录下的目录数量(不包含子目录中的)ls -l|grep "^d"|wc -l# 统计当前目录下的目录数量(包含子目录中的)ls -lR|grep "^d"|wc -l
Linux病毒扫描工具-ClamAV
参考文献
ClamAV Documentation
Linux 杀毒软件 ClamAV 初体验
ClamAV
ClamAV是一个开源(GPLv2)反病毒工具包,专为在邮件网关上扫描电子邮件而设计。它提供了许多实用程序,包括一个灵活的、可扩展的多线程守护进程、一个命令行扫描程序和用于自动数据库更新的高级工具。该软件包的核心是以共享库的形式提供的防病毒引擎。
安装
使用软件包安装
默认的从源代码安装将进入 /usr/local ,其中包含:
应用程序:/usr/local/bin
守护进程:/usr/local/sbin
库文件:/usr/local/lib
头文件:/usr/local/include
配置文件:/usr/local/etc/
病毒库:/usr/local/share/clamav/
使用Linux软件包安装,默认安装在 /usr 中,其中包含:
应用程序:/usr/bin
守护进程:/usr/sbin
库文件:/usr/lib
头文件:/usr/include
配置文件:/etc/clamav
病毒库:/var/lib/clamav/
配置C ...
Java并发编程(九)-并发工具类简介
参考文献
Java并发编程的艺术
CountDownLatch
CyclicBarrier
Java并发编程入门(十五)CyclicBarrier应用场景
并发工具类
提供了比synchronized更加高级的各种同步结构,包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作,比如利用Semaphore作为资源控制器,限制同时进行工作的线程数量.
各种线程安全的容器,比如最常见的ConcurrentHashMap、有序的ConcunrrentSkipListMap,或者通过类似快照机制,实现线程安全的动态数组CopyOnWriteArrayList等.
各种并发队列实现,如各种BlockedQueue实现,比较典型的ArrayBlockingQueue、SynchorousQueue或针对特定场景的PriorityBlockingQueue等.
强大的Executor框架,可以创建各种不同类型的线程池,调度任务运行等,绝大部分情况下,不再需要自己从头实现线程池和任务调度器.
CountDownLatch(等待多个线程 ...
MQ-面试题
参考文献
消息队列使用场景
异步处理
优点:
可以更快地返回结果;
减少等待,自然实现了步骤之间的并发,提升系统总体的性能.
流程控制
优点:
能根据下游的处理能力自动调节流量,达到“削峰填谷”的作用
缺点:
增加了系统调用链环节,导致总体的响应时延变长.
上下游系统都要将同步调用改为异步消息,增加了系统的复杂度.
服务解耦
作为发布 / 订阅系统实现一个微服务级系统间的观察者模式;
连接流计算任务和数据;
用于将消息广播给大量接收者.
消息中间件的选择
RabbitMQ
优点
RabbitMQ 的架构简单,易于上手,开发人员可以快速使用.
RabbitMQ 提供了丰富的消息模式,例如发布-订阅模式、工作队列模式、RPC 模式等.
RabbitMQ 支持各种消息传递协议,包括 AMQP、MQTT、STOMP 等.
RabbitMQ 的可靠性较高,支持持久化消息,可以确保消息不会丢失.
缺点
RabbitMQ 的性能较低,不适合处理高吞吐量的消息.
RabbitMQ 的可扩展性有限,节点的数量和规模受限于 Erlang VM 的性能.
Rabbit ...
知识点-Latency Numbers Every Programmer Should Know
参考文献
Latency Numbers Every Programmer Should Know
Latency Numbers Every Programmer Should Know
Latency numbers every programmer should know
Latency numbers every programmer should know
12345678910111213141516171819202122232425262728293031----------------------------------L1 cache reference 0.5 nsBranch mispredict 5 nsL2 cache reference 7 ns 14x L1 cacheMutex lock/unlock ...
知识点-Powers of two table
参考文献
12345678910Power Exact Value Approx Value Bytes---------------------------------------------------------------7 1288 25610 1024 1 thousand 1 KB16 65,536 64 KB20 1,048,576 1 million 1 MB30 1,073,741,824 1 billion 1 GB32 4,294,967,296 ...
Linux工具-scp
参考文献
scp
1scp [参数] [原路径] [目标路径]
命令参数
-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注 ...
Linux工具-tcpdump
参考文献
https://wizardzines.com/zines/tcpdump/
https://www.tcpdump.org/manpages/tcpdump.1.html
https://www.tcpdump.org/manpages/pcap-filter.7.html
tcpdump
tcpdump抓包使用的是libpacp这种机制.它的大致原理是:在收发包时,如果该包符合tcpdump设置的规则(BPF filter),那么该网络包就会被拷贝一份到tcpdump的内核缓冲区,然后以PACKET_MMAP的方式将这部分内存映射到tcpdump用户空间,解析后就会把这些内容给输出了
123456789101112root@root:/home/root# tcpdump -htcpdump version 4.9.3libpcap version 1.9.1 (with TPACKET_V3)OpenSSL 1.1.1f 31 Mar 2020Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ ...
Linux工具-wget
参考文献
wget
1wget [参数] [URL地址]
命令参数
启动参数:
-V, –version 显示wget的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND 执行’.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
记录和输入文件参数
-o, –output-file=FILE 把记录写到FILE文件中
-a, –append-output=FILE 把记录追加到FILE文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式(没有输出)
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-i, –input-file=FILE 下载在FILE文件中出现的URLs
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–sslcertfile=FIL ...
JVM(八)-异常处理
参考文献
极客时间-JVM是如何处理异常的?
异常处理
异常处理的两大组成要素是抛出异常和捕获异常.这两大要素共同实现程序控制流的非正常转移.
抛出异常可分为显式和隐式两种.显式抛异常的主体是应用程序,它指的是在程序中使用throw关键字,手动将异常实例抛出.
隐式抛异常的主体则是 Java 虚拟机,它指的是 Java 虚拟机在执行过程中,碰到无法继续执行的异常状态,自动抛出异常.举例来说,Java 虚拟机在执行读取数组操作时,发现输入的索引值是负数,故而抛出数组索引越界异常(ArrayIndexOutOfBoundsException).
捕获异常则涉及了如下三种代码块:
try 代码块:用来标记需要进行异常监控的代码.
catch 代码块:跟在 try 代码块之后,用来捕获在 try 代码块中触发的某种指定类型的异常.除了声明所捕获异常的类型之外,catch 代码块还定义了针对该异常类型的异常处理器.在 Java 中,try 代码块后面可以跟着多个 catch 代码块,来捕获不同类型的异常.Java 虚拟机会从上至下匹配异常处理器.因此,前面的 catch 代码块所捕获的异 ...