01 2020 档案

摘要:接口 public interface ViewResolver { /** * 通过viewName和locale查找View * @param viewName * @param locale * @return * @throws Exception */ @Nullable View res 阅读全文
posted @ 2020-01-22 14:21 意犹未尽 阅读(350) 评论(0) 推荐(0) 编辑
摘要:接口 public interface HandlerAdapter { /** * 是否能处理指定Handler * @param var1 * @return */ boolean supports(Object var1); /** * 处理Handler * @param var1 * @p 阅读全文
posted @ 2020-01-21 16:57 意犹未尽 阅读(767) 评论(0) 推荐(0) 编辑
摘要:接口 public interface HandlerAdapter { /** * 是否能处理指定Handler * @param var1 * @return */ boolean supports(Object var1); /** * 处理Handler * @param var1 * @p 阅读全文
posted @ 2020-01-21 10:14 意犹未尽 阅读(342) 评论(0) 推荐(0) 编辑
摘要:我们常用的使用方式就是@Contorller 和@RequsetMappig方式 就是通过RequestMappingHandlerMapping实现 类图 AbstractHandlerMapping上一篇已经说过了 我们主要看红线框起来的 AbstractHandlerMethodMapping 阅读全文
posted @ 2020-01-20 15:04 意犹未尽 阅读(439) 评论(0) 推荐(0) 编辑
摘要:接口 public interface HandlerMapping { /** * 根据requst获得 对应的Handler * @param var1 * @return * @throws Exception */ HandlerExecutionChain getHandler(HttpS 阅读全文
posted @ 2020-01-20 09:49 意犹未尽 阅读(623) 评论(0) 推荐(0) 编辑
摘要:mysql最大连接数量 一般我们应用程序要设置连接池大小,比如我们一台物理机设置的是200 集群部署4台 最大峰值会是800 但是mysql默认是151 当链接获取完,同时连接池也不会释放,其他程序会报错获取连接超时 所以当程序慢,我们排查不能只看mysql负载,还要结合以下信息一起看 默认取值范围 阅读全文
posted @ 2020-01-18 13:59 意犹未尽 阅读(417) 评论(0) 推荐(0) 编辑
摘要:5.7以上重复数据问题 order by limit会出现数据重复问题 我是5.6版本无法测试,5.7及其以上版本会出现 order by的列有相同的值时 同时未做索引时, mysql会随机选取这些行 文档地址:https://dev.mysql.com/doc/refman/5.7/en/limi 阅读全文
posted @ 2020-01-18 11:13 意犹未尽 阅读(1099) 评论(0) 推荐(0) 编辑
摘要:为什么要重构 重构是时刻保证代码质量的一种手段,避免代码腐化到不可维护的地步,同时也是避免前期过度设计。优秀的产品都是迭代出来的,我们不可能提前预知未来需求,所以重构也是无法避免的。 重构的二种方式 大型重构 对 系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象 阅读全文
posted @ 2020-01-18 09:45 意犹未尽 阅读(134) 评论(0) 推荐(0) 编辑
摘要:流程图 摘自:https://www.tianxiaobo.com/2018/06/29/Spring-MVC-原理探秘-一个请求的旅行过程/ 继承关系图 1.GenericServlet 只是一个抽象类提供一些基础的模板 具体实现由以下子类实现 2.HTTPServlet提供了对service的实 阅读全文
posted @ 2020-01-16 18:02 意犹未尽 阅读(462) 评论(0) 推荐(0) 编辑
摘要:说明 前面我们看到了是dispatcher负责组件的初始化 调用链: org.springframework.web.servlet.HttpServletBean#init -> org.springframework.web.servlet.FrameworkServlet#initServle 阅读全文
posted @ 2020-01-14 16:56 意犹未尽 阅读(333) 评论(0) 推荐(0) 编辑
摘要:说明 spring mvc 入口是通过配置Servlte来作为框架入口。servlte可以配置多个,每个Servlte都会初始化一个WebApplicationContext parent为root 注:httpServlet的init是 第一次访问的时候调用 配置例子 <servlet> <ser 阅读全文
posted @ 2020-01-14 14:48 意犹未尽 阅读(319) 评论(0) 推荐(0) 编辑
摘要:说明 Root WebApplicationContext 因为容器有父子关系 只是表示是最父级WebApplicationContext WebApplicationContext是一个接口 默认使用的是XmlWebApplicationContext 1.传统spring mvc配置 <!-- 阅读全文
posted @ 2020-01-14 13:32 意犹未尽 阅读(704) 评论(0) 推荐(0) 编辑
摘要:开发手册 https://github.com/alibaba/canal mysql配置 1.开启binlog 找到mysql安装目录 mysql --help|grep my.cnf 编辑my.cf [mysqld] # log_bin log-bin = mysql-bin #开启binlo 阅读全文
posted @ 2020-01-10 17:30 意犹未尽 阅读(2600) 评论(0) 推荐(1) 编辑
摘要:前面介绍了logback源码初始化过程是委托给ContextInitializer StaticLoggerBinder void init() { try { try { //<1> (new ContextInitializer(this.defaultLoggerContext)).autoC 阅读全文
posted @ 2020-01-08 13:35 意犹未尽 阅读(1770) 评论(0) 推荐(0) 编辑
摘要:类图 配置文件 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <Encoder> <pattern><pattern>|%p|%d{yyyy-MM-dd HH:mm:ss.SSS}|%t|%logger{10 阅读全文
posted @ 2020-01-08 09:35 意犹未尽 阅读(1075) 评论(0) 推荐(0) 编辑
摘要:前面我们看到 最终logger输出是委托给了appender 如果没有配置appender是不会输出的 示例配置 <?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="CHARSET" value="UTF-8" 阅读全文
posted @ 2020-01-07 17:40 意犹未尽 阅读(1457) 评论(0) 推荐(0) 编辑
摘要:类图 Logger实现了slf4J提供的Logger接口实现,ch.qos.logback.classic.Logger 成员变量 //当前logger的name private String name; //当前logger的等级 private transient Level level; // 阅读全文
posted @ 2020-01-07 14:09 意犹未尽 阅读(937) 评论(0) 推荐(0) 编辑
摘要:类图 前面代码看出来 最终返回的是LoggerContext这个类实现了LogFactory 成员变量 //表示根logger final Logger root = new Logger("ROOT", (Logger)null, this); //标识创建了多少个logger private i 阅读全文
posted @ 2020-01-07 13:50 意犹未尽 阅读(988) 评论(0) 推荐(0) 编辑
摘要:为什么要看logback源码 项目里面log.info log.error 在请求量大的时候某个请求出问题,很难定位到相关日志,所以针对前端统一返回一个id后端日志自动拼接上这个id slf4j的理解 我的理解slf4j是一个抽象的日志接口,并没有具体实现。我们可以通过slf4j集成各种日志框架lo 阅读全文
posted @ 2020-01-06 15:52 意犹未尽 阅读(1061) 评论(0) 推荐(0) 编辑
摘要:什么是迪米特原则 能够指导我们实现“高内聚、松耦合”的代码 迪米特原则的定义是: 只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接 阅读全文
posted @ 2020-01-03 09:45 意犹未尽 阅读(185) 评论(0) 推荐(0) 编辑
摘要:什么是DRY Don’t Repeat Yourself 不要定义重复代码 实现逻辑重复 public class UserAuthenticator { public void authenticate(String username, String password) { if (!isVali 阅读全文
posted @ 2020-01-03 09:36 意犹未尽 阅读(312) 评论(0) 推荐(0) 编辑
摘要:什么是KSS原则 “Simple and Stupid” 尽量保证简单 代码行数越少就越“简单”吗? 需求 一个合法的 IP 地址由四个数字组成,并且通过“.”来进行分割。每组数字的取值范围是 0~255。第一组数字比较特殊,不允许为 0。对比这三段代码,你觉得哪一段代码最符合 KISS 原则呢?如 阅读全文
posted @ 2020-01-02 17:02 意犹未尽 阅读(299) 评论(0) 推荐(0) 编辑
摘要:什么是控制反转(IOC) public class UserServiceTest { public static boolean doTest() { // ... } public static void main(String[] args) {//这部分逻辑可以放到框架中 if (doTes 阅读全文
posted @ 2020-01-02 16:34 意犹未尽 阅读(174) 评论(0) 推荐(0) 编辑
摘要:客户端不应该强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。 看起来和单一职责很像 单一职责是约束类和模块 接口隔离原则是约束接口或函数 三种表现形式 "接口"理解为一组API 微服务接口比如dubbo Service 反例 public interface UserSe 阅读全文
posted @ 2020-01-02 15:42 意犹未尽 阅读(256) 评论(0) 推荐(0) 编辑
摘要:什么是里式替换原则 子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。 正例 public c 阅读全文
posted @ 2020-01-02 09:46 意犹未尽 阅读(352) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示