目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下. 一.实现原理 Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志. MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种…
spring-boot中有很多第三方包,都封装成starter组件,在maven中引用后,启动springBoot项目时会自动装配到spring ioc容器中. 思考: 为什么我们springBoot中maven引用starter组件,就可以直接去ioc容易中拿到? 猜想是不是springBoot启动去加载这些starter组件? 那么具体是怎么实现呢? 猜想是不是所有的starter组件包都是按照一定的格式约束存在于某个文件夹下,然后springBoot启动就会去自动装配呢? 如果了解了spr…
一.前言 之前有个需求,是使ElasticSearch支持使用SQL进行简单查询,较新版本的ES已经支持该特性(不过貌似还是实验性质的?) ,而且git上也有elasticsearch-sql 插件,之所以决定手写一个,主要有两点原因: 1. 目前用的ES版本较老 2. elasticsearch-sql虽好,但比较复杂,代码也不易维护 3. 练练手  二.技术选型 目前主流软件中通常使用ANTLR做词法语法分析,诸如著名的Hibernate,Spark,Hive等项目,之前因为工作原因也有所接…
spring对于java程序员来说,无疑就是吃饭到筷子.在每次编程工作到时候,我们几乎都离不开它,相信无论过去,还是现在或是未来到一段时间,它仍会扮演着重要到角色.自己对spring有一定的自我见解,所以参考网上的视频和文章,整理出一套简单的SpirngMVC. 项目地址先贴出来,接下来大概讲下流程. 手写简单的SpringMvc框架. 主要分为几个步骤: 1. 扫描包下面的文件. 2. 根据扫描到到文件,初始化bean工厂. 3. 根据@Controller @RequestMapping 注…
HashMap简介 HashMap是Java中一中非常常用的数据结构,也基本是面试中的"必考题".它实现了基于"K-V"形式的键值对的高效存取.JDK1.7之前,HashMap是基于数组+链表实现的,1.8以后,HashMap的底层实现中加入了红黑树用于提升查找效率. HashMap根据存入的键值对中的key计算对应的index,也就是它在数组中的存储位置.当发生哈希冲突时,即不同的key计算出了相同的index,HashMap就会在对应位置生成链表.当链表的长度超…
一 写在前面 这是自己实现一个简单的具有SpringMVC功能的小Demo,主要实现效果是; 自己定义的实现效果是通过浏览器地址传一个name参数,打印“my name is”+name参数.不使用SpringMVC,自己定义部分注解,实现DispatcherServlet核心功能,通过这个demo可以加深自己对源码的理解. 先看一下实现效果: (传入了参数时) (没有传入参数时) 二  DispatcherServlet流程 加载配置文件 扫描所有相关类 初始化所有相关的类 自动注入 初始化H…
OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们通常为理解一个 warning ,鼠标移上去: 提示“声明了该字段但没有使用过” 当然,这对项目代码编译没有什么影响.不过,我想了一下,如果我们可以重写IDE的编译器,把我们的一些规则写进去,对于团队 的代码review其实是很高效的一件事情.我们通常的代码review会有滞后,都是通过提交PR或代…
上一篇我们讲了如何建立一个简单的Roslyn分析项目如分析检查我们的代码. 今天我们主要介绍各个项目中具体的作用以及可视化分析工具. 还是这种截图,可以看到解决方案下一共有三个项目. Analyzer1 : 这是比较核心的模块,主要包括两块内容,代码问题的诊断(diagnostics )和代码问题的修复(fix),该项目编译后会生成一个analyzer DLL文件.当然,同时也会生成一个NuGet package. Analyzer1.Vsix: 这是一个扩展插件,会把第一个项目生成的analy…
前言 初学jquery写的代码,陈年往事回忆一下. 正文 介绍一下大体思路 思路: 1.需要控制一块区域,这块区域一开始是隐藏的. 2.这个区域需要关闭按钮,同时我需要写绑定事件,关闭的时候让这块区域消失. 3.需要动态控制遮罩层. 4.当窗体滚动的时候,我需要去让这块移动,那么这块区域的定位应该是绝对定位的. 5.当窗体大小变化的时候,我需要将这个登录从新定位 说了这么多其实就是一个简单的效果: 嗯,按照这个大体的思路,我当时写下这样一份充满了bug性代码. //遮罩层 $(function…
直接进入正题吧,下面的代码都是我在pycharm中写好,再粘贴上来的 import socket server = socket.socket() server.bind(('127.0.0.1', 8080)) # 注意bind是server的一个方法,规定传两个参数,一个是它基本本身,另一个 # 就是ip端口地址,所以我们用元组的方式传参 server.listen(5) # 设置监听数,同一时刻,最多与五个客户端进行通信 print('正在监听8080端口.......') while T…