源码

centos 6.8 源码安装 erlang/otp 19.0.2

随声附和 提交于 2019-12-05 19:53:12
最近一直都是在debian jessie下开发erlang代码,但部署环境一直都是在centos 6上面,发现centos 6系列的软件版本还是比较落后的, 但centos的健壮性的确很好。所以开始了在centos 6.8下面源码安装 erlang/otp 19.0.2版本。 后来,特意查了一下centos 6的发布时间,原来RHEL 6 发布在2010年,现在有6年历史了。另外RHEL 有10年支持,3年额外支持。强大的不是一点点。 首先从github下面下载erlang/otp 19.0.2源码包: wget -c https://github.com/erlang/otp/archive/OTP-19.0.2.tar.gz 安装依赖: yum groupinstall -y "Development Tools" yum install build-essential m4 openssl openssl-devel unixODBC \ unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel yum install java-1.8.0-openjdk-devel java-1.8.0-openjdk-headless \ java-1.8.0-openjdk-javadoc java-1.8.0

JDK源码解析之Java SPI机制

左心房为你撑大大i 提交于 2019-12-05 19:52:22
1. spi 是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了开闭原则,Java SPI就是为某个接口寻找服务实现的机制,Java Spi的核心思想就是解耦。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 总结起来就是:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略 2. 应用场景 数据库驱动加载接口实现类的加载 JDBC加载不同类型数据库的驱动 日志门面接口实现类加载 SLF4J加载不同提供应商的日志实现类 Spring Servlet容器启动初始化 org.springframework.web.SpringServletContainerInitializer Spring Boot 自动装配过程中,加载META-INF/spring.factories文件,解析properties文件 Dubbo Dubbo大量使用了SPI技术,里面有很多个组件,每个组件在框架中都是以接口的形成抽象出来 例如Protocol 协议接口 3.

sqlalchemy 源码分析之create_engine引擎的创建

与世无争的帅哥 提交于 2019-12-05 19:34:04
引擎是sqlalchemy的核心,不管是 sql core 还是orm的使用都需要依赖引擎的创建,为此我们研究下,引擎是如何创建的。 1 from sqlalchemy import create_engine 2 engine = create_engine('mysql+pymysql://root:x@127.0.0.1/test', 3 echo=True, # 设置为True,则输出sql语句 4 pool_size=5, # 数据库连接池初始化的容量 5 max_overflow=10, # 连接池最大溢出容量,该容量+初始容量=最大容量。超出会堵塞等待,等待时间为timeout参数值默认30 6 7 pool_recycle=7200 # 重连周期 8 ) create_engine 创建引擎对象,源代码如下: class PlainEngineStrategy(DefaultEngineStrategy): """Strategy for configuring a regular Engine.""" name = "plain" engine_cls = base.Engine PlainEngineStrategy()   这里有个参数 strategy:策略,一般情况默认是'plain',通过参数动态去实例策略类。我们看看对应默认的策略'plain

SpringBoot 源码解析 (十)----- Spring Boot的核心能力 - 集成AOP

断了今生、忘了曾经 提交于 2019-12-05 19:16:24
本篇主要集成Sping一个重要功能AOP 我们还是先回顾一下以前Spring中是如何使用AOP的,大家可以看看我这篇文章 spring5 源码深度解析----- AOP的使用及AOP自定义标签 Spring中使用AOP 引入Aspect <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> 创建用于拦截的bean public class TestBean { private String message = "test bean"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public void test(){ System.out.println(this.message); } } 创建Advisor @Aspect public class AspectJTest { @Pointcut("execution(* *.test(..))") public void test()

集合类源码(三)Collection之List(CopyOnWriteArrayList, Stack)

家住魔仙堡 提交于 2019-12-05 19:13:41
CopyOnWriteArrayList 功能 全名 public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 简述 ArrayList的线程安全变体,其中所有的可变操作(添加、修改等)都是通过创建底层数组的新副本来实现的。 方法 // 返回列表里元素的数量 public int size() // 如果此列表不包含任何元素,则返回true。 public boolean isEmpty() // 如果此列表包含至少一个指定的元素,则返回true。 public boolean contains(Object o) // 返回该列表中指定元素第一次出现的索引,如果该列表不包含该元素,则返回-1。 public int indexOf(Object o) // 返回该列表中指定元素第一次出现时的索引(从指定索引向前搜索),如果没有找到该元素,则返回-1。 public int indexOf(E e, int index) // 返回该列表中指定元素的最后一次出现的索引,如果该向量不包含该元素,则返回-1。 public int lastIndexOf(Object o) // // 返回此列表中指定元素的最后一次出现的索引

QEMU1.3.0的源码分析三:user model之linux

老子叫甜甜 提交于 2019-12-05 19:05:43
作者: snsn1984 从源码目录来看,user model有两块内容bsd-user和linux-user。我主要研究了下linux-user这种情况。 首先要提一下通常容易关注的焦点,linux-user下的函数入口点:/源码目录/linux-user/main.c中的 Line:3388 int main(int argc, char **argv, char **envp). 找到了入口函数,就可以根据这个main函数中的调用关系来看看这个情况下的主要执行流程和动作了。 int main(int argc, char **argv, char **envp) { module_call_init(MODULE_INIT_QOM); qemu_cache_utils_init(envp); /*初始化了tcg的相关部分,包含了cpu动态转化的一些初始化操作。*/ tcg_exec_init(0); cpu_exec_init_all(); /*包含了虚拟cpu的初始化*/ env = cpu_init(cpu_model); /*加载可执行程序,即Guest code*/ ret = loader_exec(filename, target_argv, target_environ, regs, info, &bprm); target_set_brk(info->brk)

04 drf源码剖析之版本

强颜欢笑 提交于 2019-12-05 18:53:27
目录 04 drf源码剖析之版本 1. 版本简述 2. 版本使用 3.源码剖析 4. 总结 04 drf源码剖析之版本 1. 版本简述 API版本控制使您可以更改不同客户端之间的行为。REST框架提供了许多不同的版本控制方案。 版本控制由传入的客户端请求确定,并且可以基于请求URL或基于请求标头。 启用API版本控制后,该 request.version 属性将包含一个字符串,该字符串与传入客户端请求中请求的版本相对应。 默认情况下,版本控制未启用,并且 request.version 将始终返回 None 。 2. 版本使用 settings配置文件 REST_FRAMEWORK = { 'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning', 'ALLOWED_VERSIONS':['v1','v2'], } 路由 # 路由分发 urlpatterns = [ url(r'^api/(?P<version>\w+)/', include('api.urls')), ] # 子路由 urlpatterns = [ url(r'^order/$', views.OrderView.as_view()), ] 通过request.version可以取值 from rest_framework

chromium浏览器开发系列第二篇:如何编译最新chromium源码

懵懂的女人 提交于 2019-12-05 18:40:01
附上上一篇文章地址,方便大家查看: 下载源码 说一下为什么这么晚才发第二篇,上周和这周 department 的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了。所以请大家包涵! 上期回顾: chromium源码下载: 1.找个靠谱的vpn(我试过了,网上说的不用vpn拿代码的都不靠谱); 2.获取depot_tools,解压,设置环境变量; 3.gclient获取python和git,svn,设置环境变量; 4.fetch–nohooks chromium –nosvn=true 获取源码; 5.gclientsync --force –nohooks 同步到最新 上边的python和git,也可以通过手动安装,只要环境变量设置好了就可以。 环境配置: 获取代码的最后一步是获取编译环境也就是Visual Studio 2013,上面所有的都成功以后,运行gclient runhooks就会把编译需要的vs2013的文件下载到本地,存储在depot_tools\win_toolchain\vs2013_files路径下,主要文件是编译需要的库文件。 在windows上编译chromium的官网几个说明: 1.你必须把你的windows系统区域设置为英文,否则编译时会发生错误:"The file contains a character that

chromium浏览器开发系列第三篇:chromium源码目录说明

爷,独闯天下 提交于 2019-12-05 18:37:55
附上上两篇文章地址,方便大家查看: 下载源码 编译源码 上两篇介绍了下载源码和编译源码,这次主要介绍 chromium 的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流。 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠自己。官网只能作为一个参考。 Chromium 结构相对两年前变化很大。目录结构依然很清晰,主要有三个部分(不包括其他的库):浏览器,渲染器, webkit 。浏览器是主要的进程,代表所有的 UI 和 I / O 。渲染通常是每个 tab 页的子过程,是由浏览器驱动。 Webkit 做布局和渲染。 简单介绍解决方案文件: 解决方案文件是 src/chrome/chrome.sln 。 启动代码是在 chrome/chrome_initial 项目。 常见的共享库的代码是在 base 项目。此代码是所有项目之间共享, chromium 团队试着让它尽可能的小。 常见的浏览器特定的代码在 chrome/common 项目,它由浏览器和渲染器之间共享。 Webkit 内核代码是在项目 third_party/WebKit (只读) 。之前的 src/ webkit下 为 chromium 对 webkit 的一个封装,现在已经删除 webkit_glue 项目,把一些测试文件移植到 content/ 下,一些文件已经删除。