《从0到1:开启商业与未来的秘密》 是由彼得·蒂尔著,高玉芳译
对于许多技术人来说,都梦想有一天单干,独立创业实现财富自由,只有及少数人获得成功,也仅及少数为创业打下一个好的基础,《从0到1》从阐述了诸多初创公司存在的以及不可规避的问题,通过阅读本书,我认识到创业是人一生中最大的风险投资,因此不打没有准备的仗,只有不断的输出储备,才能在需要的时候迸发巨大的能量。
《如何阅读一本书: 读懂一本书,精于一件事》 是由轻阅读编写组著
读一本书,精一件事情,好的方法比努力更加重要。本书主要介绍如何阅读一本书,读好一本书!不是为了读书而读书,读书的目的是要从中获益,吸收对自身有价值的营养。只要上过学堂,谁不会读书呢?在未踏足社会时,多数人是为了应试而读书,当进入职场后,或许很多人没有时间读书。即使读书也是为了某一个目的而读,提升技能、升职加薪、拓展视野等,那么在有限的时间里,阅读好一本书,从中获益,讲究是的方法与技巧。
Lambda作为JDK8引入的新特性,算是一个颠覆性特性,极大的改变Java原有的编码方式,大大减少了过多的样板代码;Lambda的引入让编码更加简洁易读,同时提高了编码效率。其实它也没那么神秘,底层封装实现其实就是基于匿名内部类
来完成的,只不过转换、编译已经由JDK来完成大量的工作。
为了能够在编码中游刃有余,合理运用Lambda能够提高工作效率,改善代码性能,深入了解它的内部实现机制实属必要。而且通过洞悉内部细节,能够从中学到很多巧妙的技巧和实现原理。
随着业务不断拓展,系统对任务调度需求也逐渐增多,而当前任务调度都分散在各个子模块、子系统,对任务调度维护成本过高,也不利于系统资源管理,为了提高研发能效;调研市面开源软件,通过调研发现 XXL-JOB 比较符合业务需求,而且该分布式任务调度系统在市面非常流行,也比较成熟,而且学习成本低、开箱即用,易扩展;本文主要深入源码,探索 XXL-JOB 的运行机制,以便于更好的运用到项目中。
Mybatis 作为成熟的技术,集成到应用也非常简单,编码也非常的灵活。作为一枚后端编码人员,深入学习 Mybatis 对编码能力非常有帮助,只有对内部运作机制深入了解,才能在工作中游刃有余,有利于提高编码质量与效率;并且 Mybatis 技术有许多值得学习和借鉴的东西,非常值得研究一番,本文主要从实战使用出发,一步一步探索它的接口,渐进揭开它神秘的面纱。
核心组件
对象 | 相关对象 | 作用 |
---|---|---|
Configuration | MapperRegistry TypeAliasRegistry TypeHandlerRegistry |
包含了MyBatis 的所有的配置信息 |
SqlSession | SqlSessionFactory DefaultSqlSession |
对操作数据库的增删改查的API进行了封装,提供给应用层使用 |
Executor | BaseExecutor SimpleExecutor BatchExecutor ReuseExecutor |
MyBatis执行器,是 MyBatis 调度的核心,负责 SQL语句的生成和查询缓存的维护 |
StatementHandler | BaseStatementHandler SimpleStatementHandler PreparedStatementHandler CallableStatementHandler |
封装了JDBC Statement操作,负责对JDBCstatement的操作,如设置参数、将 Statement结果集转换成 List集合 |
ParameterHandler | DefaultParameterHandler | 把用户传递的参数转换成 JDBC Statement 所需要的参数 |
ResultSetHandler | DefaultResultSetHandler | 把 JDBC返回的 ResultSet结果集对象转换成 List 类型的集合 |
MapperProxy | MapperProxyFactory | 代理对象,用于代理Mapper接口方法 |
MappedStatement | SqlSource BoundSql |
MappedStatement维护了一条<select|update|delete|insert>节点的封装,包括了SQL信息、入参信息、出参信息 |
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口、POJO对象为数据库中的记录。并支持XML 方式配置,以及硬编码方式配置;不过现在随着微服务的盛行,SpringBoot的流行,从XML向注解方式配置实现流行起来了。
它同其他类型ORM类似,目的都是将开发人员从编写复杂、重复的Java 连接数据库重复的工作中解放处理,促使我们提供效率关注业务接下来会逐步介绍相关特性以及功能点。
特性:
- 使用连接池对连接进行管理;
- SQL和代码分离,集中管理;
- 自定义结果集映射
- 参数映射和动态 SQL;
- 重复 SQL 的提取;
- 缓存管理;
- 插件机制。
随着微服务的盛行,许多项目架构均采用服务化架构。随着业务需求不断的变化,服务也在演进迭代,前期也就几个服务,在许多小单位手动维护(😨很鸡肋,服务化了为啥还要了手动呢)服务配置,自己埋的坑总是要填的。随着服务实例越来越多后,实例环境维护成本一天天增加,费时费力,想早点下班陪媳妇又泡汤了,又得跪榴莲咯!那么这时候迫切需要自动化、可视化、统一维护环境信息,有没有什么通用的解决方案呢?
既然想要统一维护,那么可以抽离各个服务实例中的配置信息,通过网络通讯连接集中管理维护配置的中间件;这个过程也就把服务实例本地配置放到远端,需要网络通讯来传递配置信息数据,那么这时候性能相对于本地化配置性能肯定有所损耗的。面对各种又多又复杂到难以维护的实例,这都是小巫见大巫,一点点损耗也非常有价值。既然配置信息需要通过网络传递,那么设计一款这样的中间件必然绕不开网络异常,如何保证网络不可用,依然提供高效服务;这样的中间件,在社区中已经有很多非常成熟生态,也不需要重复造轮子,那来即用,如Nacos、Consul、Spring Cloud Config等。
Nacos是集服务注册与发现、配置管理为一体的中间件,它能够快速实现服务发现注册、服务配置集中维护,服务元数据以及流量管理。
在计算机中数据的存储都是以0
与1
表示的,存储设备上也仅有这2种状态,即称为二进制;在开发过程中,高级编程语言直接使用二进制的情况很少,因为底层已经做了很多封装,但是实际开发过程中了,为提高数据运算效率,二进制运算是一个不错的选择。
在实际工作中,有数据参与计算,使用二进制能够显著的提高代码运行效率,接下来主要介绍二进制运算、以及归纳常见的进制运算技巧。
# 1. MySQL体系结构
- Client Connectors: 接入方支持的协议。
- Management Serveices & Utilities: 系统管理和控制工具,mysqldump、 mysql复制集群、分区管理等。
- Connection Pool: 连接池,管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求。
- SQL Interface: SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。
- Parser: 解析器,SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的。
- Optimizer: 查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。
- Cache和Buffer(高速缓存区): 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
- Pluggable Storage Engines: 插件式存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。
- File System: 文件系统,数据、日志(redo,undo)、索引、错误日志、查询记录、慢查询等。
上一页
下一页
