SLF4J的全称是Simple Logging Facade for Java,即简单日志门面。SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logging, logback和log4j。
SLF4J提供了统一的记录日志的接口,对不同日志系统的具体实现进行了抽象化,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过绑定具体的日志系统来实现。
SLF4J的全称是Simple Logging Facade for Java,即简单日志门面。SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logging, logback和log4j。
SLF4J提供了统一的记录日志的接口,对不同日志系统的具体实现进行了抽象化,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过绑定具体的日志系统来实现。
location [=|~|~*|^~] /uri/ { … }
模式 | 含义 |
---|---|
location = /uri | = 表示精确匹配,只有完全匹配上才能生效 |
location ^~ /uri | ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 |
location ~ pattern | 开头表示区分大小写的正则匹配 |
location ~* pattern | 开头表示不区分大小写的正则匹配 |
location /uri | 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后 |
location / | 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default |
从上篇的执行流程,可以得出第一个需要思维转换的点:
Swoole是完全的长驻内存的
这个是和web开发第一个很大的不同,之前我们在做web开发,基本不怎么考虑内存控制的问题,这里从两个方面来进行结比:
Nginx 日志主要有两种:access_log(访问日志) 和 error_log(错误日志)。
sizeof是何方神圣?sizeof乃C/C++中的一个操作符(operator)是也,简单的说,其作用就是返回一个对象或者类型所占的内存字节数。
Mybatis-Plus
的条件构造器LambdaQueryWrapper
实现原理:
Wrappers.<User>lambdaQuery().eq(User::getUserName, "张三")
反射(reflect)让我们能在运行期探知对象的类型信息和内存结构,这从一定程度上弥(mi)补了静态语言在动态行为上的不足。同时,反射还是实现元编程的重要手段。
和 C 数据结构一样,Go 对象头部并没有类型指针,通过其自身是无法在运行期获知任何类型相关信息的。反射操作所需要的全部信息都源自接口变量。接口变量除存储自身类型外,还会保存实际对象的类型数据。
func TypeOf(i interface{}) Type func ValueOf(i interface{}) Value
这 两个 反射入口函数,会将任何传入的对象转换为接口类型。
在技术团队建设的过程中,团队技术经理的综合能力显得尤为重要,如何做好技术经理是很多从技术迈向管理都需要关注和去学习的一个课题,很多时候我们都在关注如何做,逆向去思考的时候可能更多的是需要考虑对应技术经理我们应该具备哪些职责(当然每个公司的的述求不一样,对于职责定义也不一样)从而去推导技术经理应该具备哪些方面的能力,再看应该如何做,或采取什么方式才能做得更好。
通常,合并分支时,如果可能,Git 会用 Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制 禁用 Fast forward
模式,Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。
table 是 lua 中常用的数据结构,写一个函数专门来调试它,就变得很有必要了