临时记录

写在前面

总是会说下次再看,下次再看,可是下次到底是什么时候呢?之前会把一些觉着蛮不错的东西记录在微博上面,然后想着会抽时间把零散的东西整理成文章,可是还没有等到我来总结,微博账号就不能登录了,也不知道为什么。我的400+微博呀,然后我就决定把内容记到这里来,然后慢慢的也把这些变成文章。可以留在记忆中,而不是风中。

笔记

  • Linux命令集学习:https://www.howtoforge.com/linux-commands/

  • vlan介绍 参考:https://zhuanlan.zhihu.com/p/35616289

  • iptables防火墙 参考:https://www.linuxidc.com/Linux/2018-08/153567.htm

  • Java excel lib ; alibaba easyexcel

  • Elastic-job 重新开始维护

  • wireshark

  • 三层交换机和路由器

  • 网络io命令 分析那个程序在一直在消耗网络

  • Linux磁盘管理

  • 数据库druid

  • ssh的配置文件解读

  • 文件系统挂载相关 mount unmount 永久性和临时性

      ​		添加磁盘
      	创建分区
      	格式化分区,写入文件系统
      	分区挂载到指定目录下
    
  • 自动化运维工具Ansible

  • spring中 formatter和converter

    • format An API for defining Formatters to format field model values for display in a UI. 在spring-context包中
    • convert Provides an HttpMessageConverter abstraction to convert between Java objects and HTTP input/output messages. spring-web包中
  • 利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行

  • java code rules tricks

  • Minikube 国内环境搭建实验:https://developer.aliyun.com/article/221687

  • what_are_some_really_useful_docker_images

  • Microsoft REST API Guidelines

  • 好用的命令行工具

  • 快乐的 Linux 命令行

  • VIM TRICKS

  • 标记接口,比如:RandomAccess,Serializable,Cloneable

  • 包装类,基本数据类型(面向过程),包装类,从面向对象的概念中需要包装类,java中的类对象本身有点类似于对于指针地址值得操作。

  • java中transient关键字和对象序列化有关系,修饰的字段不会被序列化,也就是序列化后的字节数组里面就没有了;@Transient 是jpa的注解,修饰的字段不会进行持久化,一般来说也就是数据库中不会有此字段。

  • 看guava中的代码,一直说看看来着,也看过一部分,

  • 内存中的堆栈划分,栈内存:在函数中定义的基本类型的变量和对象的引用变量都是在函数的栈内存中分配;堆内存:堆内存用于存放由new创建的对象和数组。java中的内存分配策略:静态存储分配,编译时就可以确定。栈式存储分配:进入一个程序模块时,必须要知道该程序模块所需的数据区大小才能为其分配内存。堆式存储分配:专门负责在编译时或运行时程序模块入口处都无法确定存储要求的数据结构的分配。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。

  • 看下java.security里面的内容

  • Comparable 可以让实现它的类的对象进行比较,具体的比较规则是按照 compareTo 方法中的规则进行。这种顺序称为 自然顺序。Comparator 定制排序,使用的是一种策略模式,将排序本身和业务本身进行解耦。

  • 在看apollo源码的过程中发现了CAT(Central Application Tracking),其实应该是我第一次看apollo 源码的时候就已经发现了,然后也没有记录,也就像往常一样忘记了。CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团各业务线提供系统的性能指标、健康状况、监控告警等。相关地址:https://tech.meituan.com/2018/11/01/cat-in-depth-java-application-monitoring.html;https://github.com/dianping/cat

  • 其实看很多第三方一些框架的时候,因为借助于spring本身会提供很多拓展,ioc,aop这些,但是在开发一些框架的时候,可能你就不能建立在你有一个spring的基础上,这个时候就需要一些别的类似功能的jar来完成一些你的特定需求;还有比如不能说你开发一个框架,你本身还依赖第三方很多util这样,也不是说不能引用,只是想表达自己开发出来的框架要尽可能的减少对于外界的依赖,做到尽可能功能丰富的同时比较轻量。 也是在看apollo源码的时候发现了Google的Guice,Google开源的一个依赖注入类库,然后网友说到在ES中有大量用到。

  • 发现了:能跑代码的 Markdown 编辑器——Rmarkdown

  • 一个觉得比我的博客要好看的博客模板引擎:https://beautifuljekyll.com/;https://wowchemy.com/

  • 通信之间的连接的选择场景,长连接:高频,服务端主动推送,有状态[当服务端有多台机器的时候,尽量保持客户端一直连接到同一台服务器上面];短连接:低频,无状态

  • rpc和http,rpc是远端过程调用,其调用协议通常包含传输协议和编码协议;http使用tcp传输协议,dubbo自定义tcp协议,所以rpc为什么要自定义tcp协议呢?通用定义的http1.1协议的tcp报文包含太多可能没有用的信息

  • dubbo默认的通信协议dubbo协议,以及默认的序列化方式hessian2

  • 一个网关应该包含哪些组件,提供哪些功能,路由,限流,鉴权,下游不同的协议分发

  • 多了解中间件

  • 关于线程池里面的最大线程数,QPS = 1000ms/(CPU Time) * coreSize * cpuRatio;**我们发现当线程数增加的时候,线程的上下文切换会增加,GC Time会增加。这也就导致CPU time 增加,QPS减小,RT也会随着增大。**我们希望的是在核数一定的情况下找到某个点,使系统的QPS最大,RT相对较小。所以我们需要不断的压测,调整线程池,找到这个QPS的峰值,并且使CPU的利用率达到100%,这样才是系统的最大QPS和最佳线程数。后台批处理服务须与线上面向用户的服务进行分离。 coolPoolSize = tasks/(1/taskcost) =tasks*taskcost maxPoolSize = (max(tasks)- queueCapacity - corePoolSize)/(1/taskcost)+corePoolSize(最大任务数-队列容量-核心线程数)/每个线程每秒处理能力 + 核心线程数= 最大线程数) queueCapacity = (corePoolSize/taskcost)responsetime

  • 《Effective Java 3rd》

  • UML表达不同类接口之间的关系,泛化(继承),实现,聚合(整体和部分不强依赖,部门不存在(撤销)了,员工依然存在),组合(部分和整体强依赖,公司没有了,部分也就不存在了),关联(通常是以成员变量存在的),依赖(体现为类构造方法及类方法的传入参数)

  • 关于protected修饰符,比较难理解,核心:可见性,基类的protected成员是包内可见的,并且对子类可见;若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。碰到涉及protected的调用时,首先要确定出该protected成员来自何方,其可见性范围是什么,然后就正确无误的使用了。

  • 关于java泛型(Generics)和通配符,泛型会擦除到它的第一个匹配的边界<T extends Fruit> 这里T必须是Fruit或者Fruit的导出类型(子类),泛型擦除后,Fruit就是T的边界,所有的出现T的地方都用Fruit替换。对于泛型数组的理解,泛型设计的目的之一就是将一些运行期的错误在编译器可以发现;PECS指Producer Extends,Consumer Super。

  • 换句话说,如果参数化类型表示一个生产者,就使用<? extends T>;如果它表示一个消费者,就使用<? super T>,如果你想 历collection,并对每一项元素操作时,此时这个集合是生产者(生产元素),应该使用 Collection<? extends Thing>,如果你是想添加元素到collection中去,那么此时集合是消费者(消费元素)应该使用Collection<? super Thing>

  • 使用缓存就要明白缓存的一些淘汰策略:LRU,LFU,RAMDOM

  • java中的PropertyEditor 属性编辑器

  • TCP的连接,使用中,关闭,不同状态的意义

  • 已经使用OpenRestry,然后开始用lua尝试一些简单业务进行编写,拦截请求,添加内容等。

  • GraphQL查询语言和规范

  • 关于服务网格

  • 已经使用OpenRestry,然后开始用lua尝试一些简单业务进行编写,拦截请求,添加内容等。

  • acme.sh 证书续约问题处理:https://segmentfault.com/a/1190000018244767。

  • Java堆外内存的使用和回收。

  • 命名空间的理解。

  • 在Linux操作系统中,/proc 是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息,例如我们可以使用 cat /proc/cpuinfo 查看CPU信息。然而在macOSX系统中,由于系统实现机制的原因,并没有提供此功能,所以此命令不可用。所以通过sysctl命令可以查看很多信息。

  • 想学Perl

  • TiDB

  • 编译原理不做到很熟悉,也要把相关的课程进行看一遍

  • Linux下对于大文件的处理方案,很早之前都想过这个问题却一直没有给出较好的使用方案

  • 查看每个进程占用的内存情况「物理内存百分比,使用的虚拟内存总量,使用的虚拟内存中被换出的大小,进程使用的、未被换出的物理内存大小,可执行代码占用的物理内存大小,可执行代码以外的部分(数据段+栈)占用的物理内存大小,共享内存大小」

  • 查看每个进程占用的内存情况「物理内存百分比,使用的虚拟内存总量,使用的虚拟内存中被换出的大小,进程使用的、未被换出的物理内存大小,可执行代码占用的物理内存大小,可执行代码以外的部分(数据段+栈)占用的物理内存大小,共享内存大小」

  • 想对HTTP特别熟悉

  • CICD

  • Netty

  • 0.0.0.0网络意味着什么?0.0.0.0表示整个网络,在路由器配置中可用0.0.0.0/0表示默认路由,作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去;

    • 严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一 律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由
    • 网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。
    • 若IP地址全为0,也就是0.0.0.0,则这个IP地址在IP数据报中只能用作源IP地址,这发生在当设备启动时但又不知道自己的IP地址情况下。在使用DHCP分配IP地址的网络环境中,这样的地址是很常见的。用户主机为了获得一个可用的IP地址,就给DHCP服务器发送IP分组,并用这样的地址作为源地址,目的地址为255.255.255.255(因为主机这时还不知道DHCP服务器的IP地址)。
  • 关于路由表

  • 单元测试的理解,代码质量,Mock框架Mockito,以及Spock;对于在项目中进行单元测试写demo的时候同样遇到了不同版本使用时需要注意不同注解的问题「Junit4和Junit5」,然后对于可以不启动spring容器的就不启动,不启动web容器的就不启动,都使用mock来模拟数据,单元测试的本质还是要一段代码的分支运行逻辑是否正确。

  • 开发好玩的公共jar来慢慢的学着开发小框架

  • 闭包:内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数中,

    • 全局变量可以在任何地方获取,局部变量只能在函数内部获取,闭包的出现,可以获取函数内部的变量且变量一直在内存当中

    js的变量提升。

    • 闭包就是携带状态的函数,并且它的状态可以完全对外隐藏起来。
  • 不同的压测工具的并发模型

  • 两款实用的DDos攻击工具

  • Get a head start with QUIC

  • JMX,Java平台本身对于Bean的管理

杂记

  • 每一次看了一些零碎的知识点,在回头来看java本身的东西,都会加深一点理解,毕竟还是要回归业务,目前的自己来说,写业务还是得用java来,虽然我比较喜欢瞎折腾,瞎折腾了shell,lua,js会写了不少,但是没有深入理解过js相关的内容。

> 可在下面留言(需要有 GitHub 账号)