Xc's Blog

Xc's Blog

搭建Chrome的clangd indexer server
前言最近的新工作是第一次在Mac上对进行Chrome的二次开发。作为一个VSCode爱好者,必须在VSCode上搭建一个用着顺手的开发环境。 Chrome使用了GN/Ninja作为构建系统,llvm/clang作为编译器。由于编辑过程比较复杂,自带的C/C++插件无法做到开箱即用,恰好llvm项目有一个clangd的子项目,提供语法分析的服务,而clangd恰好有VSCode的插件,而Chrome也很贴心地提供了clangd所需的compile_commands.json的生成脚本。 这个方案看起来很美好,但是在实际使用中,发现了一些问题: clangd有了compile_comman...
为SpringBoot的启动过程埋点
简而言之,继承org.springframework.boot.SpringApplicationRunListener,并且让Spring加载进来。 为什么要为SpringBoot的启动过程埋点因为SpringBoot启动过慢,需要找出在Spring的哪一步遇到了性能问题,然后进行专项优化。 为什么不能用Spring的EventListener来处理EventListener的一种用法如下:1234@EventListenerpublic void handleEventObject(Object event) { System.out.println("event: ...
Aria2 源码阅读
Aria2是一个用C++写的开源的流行的跨平台的文件下载工具

我之前在写百度网盘客户端的时候遇到了文件下载的问题,缺少解决方案,于是便萌生了学习别的开源下载工具的念头。之前用过Aria2,觉得这个软件很不错,于是就选择了它。

Aria2主分支上的代码库十分庞大,各个类的数量有几十个之多。我这次先选了Aria初次发布(0.1.0版)的代码进行学习,因为这个时候的代码库还没有现在这么庞大,可以比较简单地了解作者的思路。因此可以先从这里出发,等理解作者的思路之后,再去看最新的代码库,就能够事半功倍了。

我也会将自己学习的过程中的笔记整理出来,同步到博客上。
在spring中定义自己的xsd和对应的解析器
用途可以自定义自己的xml标签和解析器,封装实现类,简化使用者的代码,而且比较Coooooool, 配置文件Spring 会扫描每个包下的META-INF/spring.schemas文件,用户可以在这个文件下定义自己的xsd 对应方式为: xsd的虚拟html地址=xsd的文件地址 写完schema后需要有对应的handler来处理,handler和schema的定义关系保存在META-INF/spring.handlers中 对应方式为: xsd的虚拟html地址=Handler类名 JAVA代码Handler 需要继承NamespaceHandlerSupport,在init方法中...
多线程文件下载的一种思路
最近在尝试用Go写一个百度网盘的第三方客户端,其中涉及到了网盘文件的下载,虽然用简单粗暴的对接http流和文件流就可以做到下载,但下载速度总是不尽如人意而且听上去也不够高端。但如果要调用aria2等专业下载工具的话又显得太笨重,于是就想着自己实现一份简单的多线程下载的工具。 基本思路文件在下载开始的时候就预先分配好空间。在开始下载的时候给定一个下载线程的数量,每个线程负责一块文件的大小,使用HTTP头中的Range字段请求文件的局部数据,使用随机random access写入文件内容。 虽然使用了多线程下载,在有N条线程的情况下,理论上下载时间会变为1/N,但不可避免地,会有那么一条或者...
Xiaochen Wu
一个希望成为全栈工程师的蒟蒻后台开发
FRIENDS
Cee酱