Java--进阶篇
1 注解(Annotation)1.1 注解概述注解(Annotation)是从JDK5.0开始引入,以“@注解名”在代码中存在。例如:
123@Override@Deprecated@SuppressWarnings(value=”unchecked”)
Annotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。还可以添加一些参数值,这些信息被保存在 Annotation 的 “name=value” 对中。
注解可以在类编译、运行时进行加载,体现不同的功能。
未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,Struts2有一部分也是基于注解的了。注解是一种趋势,一定程度上可以说:框架 = 注解 + 反射 + 设计模式。
1.2 常见的Annotation的作用1.2.1 生成文档相关的注解1234567@author 标明开发该类模块的作者,多个作者之间使用,分割@version 标明该类模块的版本@see 参考转向,也就是相关主题@ ...
Java--基础篇
0 参考资料
JAVA各版本安装包下载路径:https://www.injdk.cn/?spm=a2c6h.12873639.article-detail.22.b53720bdMO7XUf
依赖包网站:https://mvnrepository.com/
1 编程基础1.1 Main方法
class
在Java语言中的一等公民,Java程序就是一个一个的类组成的类由修饰符,类名和类的内容组成类名必须与保存类源文件的文件名相同
main方法
Main方法是Java程序执行的入口方法由方法修饰符,方法名,参数列表和方法体等组成
1.2 基本数据类型
整数类型
byte 占用1个 byte,值域是 -128 ~ 127
short 占用2个 byte,值域是-32768~ 32767
int占用4个 byte,值域是 -2147483648 ~ 2147483647。Java 中整数缺省是 int 类型
long 占用8个 byte,值域是-9223372036854774808 ~ 9223372036854774807
浮点类型
float-有精度,值域复杂 340 ...
基于 Tongsuo(铜锁)实现国密通信
1 Tongsuo(铜锁)的编译12345git clone https://github.com/Tongsuo-Project/Tongsuo.gitcd Tongsuo./config --prefix=/opt/tongsuo enable-ntls no-sharedmake -jsudo make install
2 生成服务端测试证书
生成一个 EC 密钥对(私钥和公钥),使用 SM2 曲线参数,保存私钥为 server_sign.key 文件:
1openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 -out server_sign.key
使用私钥生成一个证书签名请求(CSR),并将其保存为 server_sign.csr 文件。该请求使用 SM3 散列算法,并且采用给定的主题信息:
1openssl req -config $CONF_DIR/subca.cnf -key server_sign.key -new -out server_sign.csr -sm3 -nodes -subj ...
国密介绍
1 简介铜锁/Tongsuo是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。
铜锁应用场景:
存储加密
网络传输:支持 TLS 、QUIC 、RFC8998、TLCP安全传输协议
密码合规
密钥管理
隐私计算:支持同态加密、零知识证明等算法
铜锁与OpenSSL对比:
2 国密算法介绍国密常见的算法有 SM2 、SM3、SM4、SM9,具体分类如下:
对称加密算法:
SM1算法:对称加密算法,用于替代国际标准的DES算法。
SM4算法:对称分组密码算法,被用于替代国际标准的AES算法。
非对称加密算法:
SM2算法:非对称加密算法,用于数字签名、密钥协商等。
SM9算法:基于椭圆曲线密码体制的身份认证密码学算法。
哈希算法:
SM3算法:密码哈希函数,用于替代MD5、SHA-1等哈希算法。
2.1 SM4 算法2.1.1 简介SM4是对称算法,与国际上的算法 如:AES 对 ...
Nginx支持国密实践
1 简介我国密码行业中有两个主要的通信协议相关的技术标准:
《信息安全技术 传输层密码协议(TLCP)》:即GB/T 38636-2020
《SSL VPN 技术规范》:即GM/T 0024-2014
上述协议关联标准:如数字证书标准GB/T 20518, SM2密码算法标准GB/T 35275等
《SSL VPN技术规范》作为行业标准,部分内容已上升为《信息安全技术 传输层密码协议(TLCP)》国密标准。
国密TLS,又称GMTLS1.1,GMTLS1.1中的1.1代表国密TLS的版本号: _0x0101_。众所周知,目前TLS协议支持的版本:
1234VersionTLS10 = 0x0301VersionTLS11 = 0x0302VersionTLS12 = 0x0303VersionTLS13 = 0x0304
目前主流的TLS软件程序实现中,通信实体在建立TLS连接时,会优先协商使用最大版本号TLS协议 _(版本号越大意味着安全性越高、性能越好)_,因此VersionGMSSL = 0x0101 版本号的设定增加了软件支持的复杂度,这也是阻碍GMTLS1.1广泛应 ...
OpenResty 性能优化
1 性能下降10倍的真凶:阻塞函数OpenResty 之所以可以保持很高的性能,简单来说,是因为它借用了 Nginx 的事件处理和 Lua 的协程机制,所以:
在遇到网络 I/O 等需要等待返回才能继续的操作时,就会先调用 Lua 协程的 yield 把自己挂起,然后在 Nginx 中注册回调;
在 I/O 操作完成(也可能是超时或者出错)后,由 Nginx 回调 resume,来唤醒 Lua 协程。
这样的流程,保证了 OpenResty 可以一直高效地使用 CPU 资源,来处理所有的请求。在这个处理流程中,如果没有使用 cosocket 这种非阻塞的方式,而是用阻塞的函数来处理 I/O,那么 LuaJIT 就不会把控制权交给 Nginx 的事件循环。这就会导致,其他的请求要一直排队等待阻塞的事件处理完,才会得到响应。
下面,我再来介绍几个常见的坑,也就是一些经常会被误用的阻塞函数;
1.1 执行外部命令在业务中通常可以执行一些外部的命令和工具,来辅助完成一些操作。比如杀掉某个进程:
1os.execute("kill -HUP " ...
OpenResty API篇
2 OpenResty开发平台2.1.1 协程和事件驱动在 OpenResty 层面,Lua 的协程会与 NGINX 的事件机制相互配合。如果 Lua 代码中出现类似查询 MySQL 数据库这样的 I/O 操作,就会先调用 Lua 协程的 yield 把自己挂起,然后在 NGINX 中注册回调;在 I/O 操作完成(也可能是超时或者出错)后,再由 NGINX 回调 resume 来唤醒 Lua 协程。这样就完成了 Lua 协程和 NGINX 事件驱动的配合,避免在 Lua 代码中写回调。我们可以来看下面这张图,描述了这整个流程。其中,lua_yield 和 lua_resume 都属于 Lua 提供的 lua_CFunction。
下面是 ngx.sleep 的一段源码,可以帮你更清晰理解这一点。 这段代码位于 ngx_http_lua_sleep.c 中,你可以在 lua-nginx-module 项目的 src 目录中找到它。在ngx_http_lua_sleep.c 中,我们可以看到 sleep 函数的具体实现。你需要先通过 C 函数 ngx_http_lua ...
OpenResty 基础篇
0 参考资料
nginx-lua-module 中文版
nginx-lua-module 原版
API网关:
KONG基于nginx+OpenResty
Envoy
APISIX
0.1 课程目录
1 入门篇1.1 初探OpenRestyOpenResty的三大特性:
详尽的文档和测试用例
同步非阻塞
动态
传统的Web服务器,比如NGINX,如果发生任何的变动,都需要去修改磁盘上的配置文件,然后重新加载才能生效,这是因为没有提供API,来控制运行时的行为。但OpenResty可以使用脚本语言lua来控制逻辑的,动态时Lua天生的优势。
1.2 第一个程序 下边通过使用Lua语言,使用OpenResty启动服务,然后响应打印出“hello world”
安装OpenResty
可以取官网下载源码进行编译安装(enter link description here) 2. 创建工作目录
创建工作目录,然后目录下创建日志和配置文件保存地方
123mkdir geektimecd geektimemkdir logs/ conf/
编写nginx.conf
下边编写一个 ...
Go--基础篇
0 参考资料GO开源项目收集:https://github.com/avelino/awesome-go
01 第一章 Go语言简介1.1 工作区和GOPATH工作区是放置Go源码文件的目录工作区下边有pkg、src、bin三个目录
pkg目录
用于存放归档文件(名称以.a为后缀的文件),所有归档文件都会被存放到该目录下的平台相关目录中,同样以代码包为组织形式
bin目录
用于存放当前工作区中的Go程序的可执行文件
当环境变量GOBIN已有效设置时,该目录会变的无意义
当GOPATH的值中包含多个工作区的路径时,必须设置GOBIN,否则无法成功安装Go程序的可执行文件
1.2 代码包的导入
本地化导入
123import . "strings"HasPrefix("abc", "a") //导入后使用函数不需要加包名
1.3 包管理1.3.1 Go的依赖管理
1.3.2 go mod12345678go mod init mod名称go build 源码文件go mod download 下载依赖包go mod ...
Python--常用工具包
0 参考资料
Pandas中文文档
NumPy中文文档
1 Pandas 数据处理1.1 Pandas 数据结构 - SeriesPandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
Series 由索引(index)和列组成,函数如下:
1pandas.Series( data, index, dtype, name, copy)
参数说明:
data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。
示例:
1234567891011121314151617181920212223242526272829# 从列表创建Series  pd.Series(['a', 'b', 'c'])  # 0    a  # 1    b  # 2    c  # dtype: object  # 自动创建索引    # 通过字典创建 ...
