源码

springmvc源码学习

萝らか妹 提交于 2019-12-15 17:39:23
1.springmvc运行流程 流程图是直接在百度图片中找的一张 >.前台发送请求,请求会首先通过DispatcherServlet进行url的匹配;如果匹配不到,看是否配置<mvc:default-servlet-hanler> 如果配置了,就找对应的目标资源 >.如果匹配到url,就调用HandlerMapping,获取到handlerExecutionChain >.dispatcherServlet会调用handlerAdapter >.handlerAdapter调用对应的handler,也就是controller方法。 >.调用完成之后,返回modelAndView >.视图解析器会解析出对应的view,并进行视图的渲染 2.springMVC的核心类和接口 前端控制器 DispatcherServlet 处理器映射器 HandlerMapping 处理器适配器 HandlerAdapter 视图解析器 viewResolver ModelAndView 3.springmvc的controller有三种配置方式 1.@Controller注解 2.实现Controller接口,这种方式,需要在类名增加@Component("/映射地址") 3.实现HttpRequestHandler接口,在类上加@Component("/映射地址") 后面两种原理是一样的,下面会说到

Redis源码剖析--列表t_list

对着背影说爱祢 提交于 2019-12-15 14:25:18
上一篇博客Redis源码剖析–快速列表 带大家一起剖析了quicklist这个底层数据结构的实现原理。Redis对外开放的列表list结构就是采用quicklist作为底层实现(在新版本的Redis源码中,不再采用ziplist和sdlist两种结构,而是统一采用quicklist)。有关列表键的实现源码在t_list.c文件中,大家可以边看源码边看这篇博客,一起来理解。 List概述 其实在Redis源码剖析—对象Object一文中有一个错误,list数据类型的底层编码并没有采用ziplist和sdlist,而是统一采用quicklist作为底层数据结构,这点需要提前说明一下。Redis的新版本中,list的底层编码类型只有OBJ_ENCODING_QUICKLIST,那么原先关于合适进行编码类型转换的代码都省略了。 列表没有其特有的数据结构,而是采用RedisObject作为其泛型数据结构,当RedisObject的type字段为OBJ_LIST时,该对象被认为是一个列表。 Redis为列表提供了迭代器结构,本质就是quicklist迭代器的基本上做了一层封装。 typedef struct { robj *subject; // 迭代器指向的对象 unsigned char encoding; // 编码类型 unsigned char direction; // 迭代器方向

ArrayList源码分析(二)

邮差的信 提交于 2019-12-15 12:35:41
ArrayList 文章目录 ArrayList ArrayList调整数组容量 默认扩容 手动扩容 ensureCapacityTest trimToSize方法 fail-fast机制 单线程环境下的fail-fast 多线程环境下的fail-fast iterator分析 避免fail-fast 方法1 方法2 ArrayList调整数组容量 默认扩容 每当向数组中添加元素时,都要去检查添加后元素的个数是否会超出当前数组的长度,如果超出,数组将会进行扩容,以满足添加数据的需求 private void ensureCapacityInternal ( int minCapacity ) { if ( elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA ) { minCapacity = Math . max ( DEFAULT_CAPACITY , minCapacity ) ; } ensureExplicitCapacity ( minCapacity ) ; } private void ensureExplicitCapacity ( int minCapacity ) { modCount ++ ; // overflow-conscious code if ( minCapacity - elementData .

HashMap源码分析

☆樱花仙子☆ 提交于 2019-12-15 12:31:19
HashMap 文章目录 HashMap 基本属性 构造函数 无参构造 HashMap(int,float)型构造函数 HashMap(int)型构造函数 `HashMap(Map)型构造函数` HashMap常用方法 put方法 hash方法 putVal方法 寻找key对应的映射关系: treeifyBin方法 treeify方法 get方法 resize方法 hashmap的实现原理:首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。 当链表数组的容量超过初始容量的0.75时,再散列将链表数组扩大2倍,把原链表数组的搬移到新的数组中 当table中的元素足够多时,发生冲突的概率就会大大增加,冲突的增多会导致每个桶中的元素个数变多,这样的话会使得查找元素效率变得低下,当同一个桶中元素个数达到8时,桶中的元素结构将转换为红黑树。 基本属性 public class HashMap < K , V > extends AbstractMap < K

见贤思齐,正式开启源码之旅

一世执手 提交于 2019-12-15 10:30:29
  前几天,忽然发自内心的感恩这些开源项目,及为开源贡献代码的程序员、支持者(如提供资金、机房等)。于是就想,自己水平还可以,也应该贡献一批源码出来。   正好刚刚突击完工作,近期相对应该轻松了,那就开始吧。   因为是开源,所以受到工作时间、出差等影响。时间上难免就显得拖拉。有时间就会更新,这一点确定无疑。 来源: CSDN 作者: 柳鲲鹏 链接: https://blog.csdn.net/quantum7/article/details/103545995

java并发源码:AbstractQueuedSynchronizer

∥☆過路亽.° 提交于 2019-12-15 07:18:59
java并发源码:AbstractQueuedSynchronizer 一、简介 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pEGdDFSw-1575887227561) ​ AQS(队列同步器)是用来构建锁或者其它同步组件的基础框架,它使用了一个int成员变量来标识同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。 ​ AQS面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理,线程的排队,等待与唤醒等底层操作。 二、数据结构 1、Node 属性类型 描述 int waitStatus ①CANCELLED:1 由于在同步队列中等待的线程等待超时或者被中断,需要从同步队列中取消等待,节点进入该状态不会变化 ②SIGNAL:-1 后继节点处于等待状态,而当前节点的线程如果释放了同步状态或者被取消,将会通知后继节点,使后继节点的线程得以运行。 ③CONDITION:-2 节点在等待队列中,节点线程等待在Condition上,当其它线程对Condition调用了signal()方法后,该节点将会从等待队列中转移到同步队列中,加入到同步状态的获取中。 ④PROPAGATE:-3 表示下一次共享式同步状态获取将会无条件的被传播下去。 ⑤INITIAL:0 初始状态 Node prev 前驱节点 Node next 后继节点 Node

UE4+源码引擎

余生颓废 提交于 2019-12-15 06:37:57
一、构建源码引擎 1、注册EpciGame,选择管理账户,添加链接的账户 2、添加Github账户后,进入Github会收到加入EpicGames开发者组织的通知 3、点击EpicGames开发者组织,会看到私有项目UnrealEngine源码引擎 4、之后选择自己项目对应的源码引擎版本进行下载 ,下载完解压 5、然后双击Setup.bat文件,将会下载源码引擎工程相关的组件 6、下载完成后,双击GenerateProjectFiles.bat文件,生成源码引擎工程文件 7、双击UE4.sln工程,在VS中编译,编译成功后,将会生成对应的虚幻引擎 二、注册源码引擎到EpicGames 经过上面的步骤,源码引擎已经构建成功,但是在对项目就行选择引擎版本的时候,发现并没有这个版本 这是因为,构建的引擎没有注册到EpicGames中 1、找到EpicGames安装目录下的注册器 2、将注册器拷贝到构建的虚幻引擎对应目录下 3、双击,提示注册成功 来源: CSDN 作者: 张美yes 链接: https://blog.csdn.net/zhangmei126/article/details/103458181

在线多功能工具箱php源码

此生再无相见时 提交于 2019-12-15 05:28:06
一款在线工具箱的网页PHP源码,直接上传到空间或者服务器即可完美搭建,非常实用。 在线多功能工具箱php源码 品牌其他 语言PHP 数据库Mysql 移动端无 大小5.7 MB 规格整站源码 授权免授权 源文件完全开源(含全部源文件) 下载地址: https://www.top1sh.com/384.html 本文来自 资源网 来源: CSDN 作者: tw199804 链接: https://blog.csdn.net/tw199804/article/details/103481460

spring源码导入idea

柔情痞子 提交于 2019-12-15 03:17:38
gradle下载路径: https://services.gradle.org/distributions/ spring源码下载路径: https://github.com/spring-projects/spring-framework 网上有很多方法,但是我在使用时,多少遇到一些很问题,不好解决.这里把我个人觉得应该注意的地方,罗列一下. 1、idea的版本一定要和源码中的gradle版本一致。小版本有微小差异,应该是没有问题的 查看源码的gradle版本。源码路径下gradle\wrapper目录下,gradle-wrapper.properties文件 查看idea中的gradle版本。从idea的安装路径中查找,查看plugins\gradle\lib目录下jar版本 我之前,是直接用git客户端(git clone https://github.com/spring-projects/spring-framework.git)直接拉取最新的代码,但是我的idea是2018.1.2的版本。这个版本的gradle版本是4.4。而拉下来的最新的spring代码,是gradle-5.6.4-bin版本的。正式因为这种版本差异,导致我在源代码路径执行gradlew.bat和在idea导入源代码时,出现各种情况的报错。 例如,在导入idea后,gradle编译代码时,出现如下错误

使用VS进入源码调试

独自空忆成欢 提交于 2019-12-15 01:09:22
我的使用的是 Visual Studio 2019 原因 学习完一部分东西后,我发现了一个更牛b的东西ABP框架。 所以开始学习ABP框架 https://github.com/aspnetboilerplate/aspnetboilerplate 问题来了,   1.怎么学习? 去官网直接生成项目【https://aspnetboilerplate.com/】,先照着学。   2.无法进入源代码该怎么办? 重点来了!重点来了!重点来了!重点来了!重点来了!重点来了! 使用vs调试进入源码   1.下载ABP框架源码,然后自己折腾吧。   2.使用vs调试直接进入源代码。 O(∩_∩)O哈哈~       特么的折腾了一个多星期终于搞好了。       跟着下面的步骤来。       1.工具=》选项              2.调试=》常规              3.符号=》勾选符号服务器,我这里勾选NuGet.org用来调试ABP源码,当然也可以进入到asp.net core源码中。              4.“调试”的时候打开工具=》选项=》符号=》加载所有符号,这里提前加载所有符号,会卡一会。              5.其他部分,可以查看加载了的“符号”        我是怎么知道的呢? 先谷歌了好久,一个个的按照别人的方法测试,都不行。最后找到了msdn。