源码

springboot源码分析之--自动配置

守給你的承諾、 提交于 2020-03-01 16:12:53
看springboot的pom依赖的parent是spring boot starter parent (1)首先是资源过滤 过滤application配置文件 推荐使用yml (2)其次是pluginsmanagement 插件管理 配置了依赖环境dependency 所以在写自己的dependency的时候不用写版本 ** springbootapplication ** 元注解之一 : @ springbootconfiguration------的元注解就是一个 @ configuration----元注解是 @ component @ enableautoconfiguration----元注解是 @ AutoCOnfigurationPackage @ Import ( AutoConfiguraqtionImportSelector . clas ) ---通过registar类来获取注解所在的包名 再利用gconponentscan就可以扫描了---通过getAutoConfigurationEntry来获取自动配置类的实体---利用META-INF / spring . factories 读取此文件生成properties------文件中可以看到 # initializers # Application Listeners #

SpringBoot Profile源码介绍

£可爱£侵袭症+ 提交于 2020-03-01 15:41:25
进入上一篇使用profile的load()方法(ConfigFileApplicationListener类中) 1、initializeProfiles(); 1)进入initializeProfiles方法。初始化Profiles,将所有的profile增加到prifiles集合中 private void initializeProfiles() { // The default profile for these purposes is represented as null. We add it // first so that it is processed first and has lowest priority. this.profiles.add(null); Set<Profile> activatedViaProperty = getProfilesActivatedViaProperty(); this.profiles.addAll(getOtherActiveProfiles(activatedViaProperty)); // Any pre-existing active profiles set via property sources (e.g. // System properties) take precedence over those

rpm包和源码包的区别

荒凉一梦 提交于 2020-03-01 14:39:46
1、区别 ◆安装之前的区别:概念上的区别 //概念区别见“软件包管理-rpm"文档 ◆安装之后的区别:安装位置不同 3 、源码包安装位置 ◆安装在指定位置当中,一般是/usr/local/软件名/ 4 、安装位置不同带来的影响 ◆RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是: /etc/rc.d/init.d/httpd start service httpd start ◆而源码包安装的服务则不能被服务管理命 令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如: /usr/local/apache2/bin/apachectl start 由于rpm包和源码包的安装位置不同,所以rpm包可以使用 “service”服务管理命令或绝对路径启用服务;而源码包只能使用绝地路径管理服务。 来源: https://www.cnblogs.com/xbycf/p/12389602.html

源码包安装管理

邮差的信 提交于 2020-03-01 14:35:16
1、安装准备 ◆安装C语言编译器 ◆下载源码包 http://mirror.bit.edu.cn/apache/httpd/ 2、安装注意事项 ◆源代码保存位置:/usr/local/src/ ◆软件安装位置:/usr/local/ ◆如何确定安装过程报错: 安装过程停止 并出现error、warning或no的提示 3、源码包安装过程 ◆下载源码包 ◆解压缩下载的源码包 进入解压缩目录 来源: https://www.cnblogs.com/xbycf/p/12389609.html

redis源码分析之内存布局

假装没事ソ 提交于 2020-03-01 14:05:03
1. 介绍 众所周知,redis是一个开源、短小、高效的key-value存储系统,相对于memcached,redis能够支持更加丰富的数据结构,包括: 字符串(string) 哈希表(map) 列表(list) 集合(set) 有序集(zset) 主流的key-value存储系统,都是在系统内部维护一个hash表,因为对hash表的操作时间复杂度为O(1)。如果数据增加以后,导致冲突严重,时间复杂度增加,则可以对hash表进行rehash,以此来保证操作的常量时间复杂度。 那么,对于这样一个基于hash表的key-value存储系统,是如何提供这么丰富的数据结构的呢?这些数据结构在内存中如何存储呢?这篇文章将用大量的图片演示redis的内存布局和数据存储。 2. redisServer 在redis系统内部,有一个 redisServer 结构体的全局变量 server , server 保存了redis服务端所有的信息,包括当前进程的PID、服务器的端口号、数据库个数、统计信息等等。当然,它也包含了数据库信息,包括数据库的个数、以及一个redisDb数组。 struct redisServer { …… redisDb *db; int dbnum; /* Total number of configured DBs */ …… } 显然

JDK1.7的HashMap源码分析

﹥>﹥吖頭↗ 提交于 2020-03-01 13:54:21
HashMap介绍 jdk1.7的HashMap是基于数组+链表 jdk1.8的HashMap是基于数组+链表+红黑树 1.7HashMap存储结构 static final Entry<?,?>[] EMPTY_TABLE = {}; // HashMap底层使用Entry数组作为存储, 默认为: {} transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; // Entry对象封装key和value, 且使用的是单向链表 static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash; /** * Creates new entry. */ Entry(int h, K k, V v, Entry<K,V> n) { value = v; next = n; key = k; hash = h; } ................................. } 通过源码分析,1.7HashMap: 使用table 数组 来存储对象 使用Entry对象作为 单向链表 封装了Key和value 所以 1.7HashMap底层采用的是 : 数组+链表 构造函数 // 默认初始容量

如何通过WASI SDK 在Linux上编译ZXing C++

余生颓废 提交于 2020-03-01 13:48:54
Mozilla在今年三月份的时候公布了 WASI 。WASI的目标就是让WebAssembly在任何地方都可以运行,而不仅仅像现在这样只能运行在Node.js和Web浏览器中。WASI目前依然处于初级阶段,这篇文章分享下如何把ZXing C++通过WASI Libc编译成wasm文件。 支持WASI运行时的工具 现在可以用 wasmer 和 wasmtime 通过命令行来运行支持wasi的wasm文件。wasmer提供了安装包,而wasmtime只能通过源码来编译。两个工具都支持windows, Linux和macOS。 编译ZXing C++ 下载最新的 WASI-SDK 。这个安装包中已经自带了clang,所以不需要单独安装clang。 设置环境变量: sudo dpkg -i wasi-sdk_7.0_amd64.deb export PATH=/opt/wasi-sdk/bin:$PATH export CC=/opt/wasi-sdk/bin/clang export CXX=/opt/wasi-sdk/bin/clang++ 从GitHub上下载一份 ZXing C++的源码 。 接下来要对工程结构做一些修改。首先在example中的CMakeLists.txt文件里设置sysroot: set (CMAKE_SYSROOT /opt/wasi-sdk/share

VUE系列之李南江写VUE源码

余生长醉 提交于 2020-03-01 13:40:57
一 VUE响应式原理 第一部分: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>01-Vue基本模板</title> <!--1.下载导入Vue.js--> <script src="js/vue.js"></script> </head> <body> <div id="app"> <input type="text" v-model="name"> <p>{{ name }}</p> </div> <script> // 2.创建一个Vue的实例对象 let vue = new Vue({ // 3.告诉Vue的实例对象, 将来需要控制界面上的哪个区域 el: '#app', // 4.告诉Vue的实例对象, 被控制区域的数据是什么 data: { name: "李南江" } }); /* 1.Vue响应式的原理(数据改变界面就会改变)是什么? 时时监听数据变化, 一旦数据发生变化就更新界面 2.Vue是如何实现时时监听数据变化的? 通过原生JS的defineProperty方法 3.defineProperty方法的特点 可以直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象 4.defineProperty用法 obj: 需要操作的对象 prop:

cygwin64 编译 redis2.8.3源码

匆匆过客 提交于 2020-03-01 13:00:48
1) windows 7 64 2) 安装 cygwin 64 下载相关的库 3) 下载redis 2.8.3源码 wget http: //download.redis.io/releases/redis-2.8.3.tar.gz 进入到deps目录,修改文件 deps/hiredis/fmacros.h #ifndef __HIREDIS_FMACRO_H #define __HIREDIS_FMACRO_H #if !defined(_BSD_SOURCE) #define _BSD_SOURCE #endif #if defined(__sun__) #define _POSIX_C_SOURCE 200112L #elif defined(__linux__) || defined(__OpenBSD__) || defined(__NetBSD__) #define _XOPEN_SOURCE 600 #else #define _XOPEN_SOURCE #endif //这是添加的. #if defined(__linux__) || defined(__CYGWIN__) #define _GNU_SOURCE #define _DEFAULT_SOURCE #endif #endif 然后编译deps cd deps make lua linenoise

【源码阅读】dbutil包中BasicRowProcessor内部类CaseInsensiti...

落花浮王杯 提交于 2020-03-01 12:58:34
本文就是对我问的问题: http://www.oschina.net/question/1029535_127629?p=1#AnchorAnswer597790 的一个解释。 dbutil包为我们提供了BasicRowProcessor类,用来将查询结果集进行封装。其中有一个toMap方法,该方法的作用就是将结果集转化成一个Map,结果集中的字段名对应map的key,字段值对应map中的value。该方法的独特之处在于:获取的map的key是大小写不敏感的。 先看一下toMap方法: /** * Convert a <code>ResultSet</code> row into a <code>Map</code>. This * implementation returns a <code>Map</code> with case insensitive column * names as keys. Calls to <code>map.get("COL")</code> and * <code>map.get("col")</code> return the same value. * @see org.apache.commons.dbutils.RowProcessor#toMap(java.sql.ResultSet) * @param rs ResultSet