- 博客(37)
- 收藏
- 关注
原创 Spring MVC - HandlerMapping思路分析
HandlerMapping分析 HandlerMapping用于寻找处理对应请求的Handler0x01 流程了解第一点:了解HandlerMapping接口HandlerMapping是个接口,主要需要实现方法getHandler(HttpServletRequest),虽然是返回对应Handler,实际上是返回类HandlerExecutionChain第二点:了解Handler...
2019-09-30 14:06:25 206
原创 MyBatis源代码解析 配置文件解析
一、解析流程1、SqlSessionFactoryBuilder#build方法2、build方法内部通过XMLConfigBuilder#parse解析3、parse方法内部调用parseConfiguration方法,通过xml解析器获取xml的头节点<configuration/>4、parseConfiguration方法内部调用多个方法分别解析不同节点,返回Confi...
2019-09-03 15:28:39 367
原创 Json序列化相关Bug
0x01 Json序列化字符串导致的post错误原因由于公司提供的HttpUtils工具对参数进行判断,如果是json参数则自行序列化,当我将对象序列化成字符串传入并且再次被JSONObject再次toJSONString之后导致字符串再次加上了两个"错误截图...
2019-04-18 15:35:35 219
原创 SpringMVC全局异常
0x01 Servlet默认全局异常SpringMVC默认没有配置任何异常处理,采用web.xml配置,将异常重定向到/error,然后新建一个Controller处理/error的请求即可<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/...
2019-04-15 18:37:18 300
原创 Servlet全局异常处理
在学习Spring的全局异常处理总是感觉有哪里不知道,今天看了一篇文章,知识脉络算是清晰了不少。web.xml能够配置处理特定异常,根据不能的ErrorCode,如404等。也能根据异常类型进行处理,所以当我们配置异常类型为Throwable相当于对所有异常都进行统一处理,该处理方式是将其重定向到某个Servlet文章地址:Servlet异常处理...
2019-04-12 18:22:30 1468
原创 如何搭建SpringMVC项目
0x01 配置web.xml配置ContextLoaderListener<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value><...
2019-04-06 13:32:20 191
原创 Spring学习系列之ORM集成思路
0x01 Spring的ORM集成思路通过模板方法模式进行集成,防止资源散落造成的内存泄露,在模板方法如execute中进行资源获取并关闭,异常捕获,事务管理。关注点1:获取资源获取ConnectionFactoryJDBC获取DataSourceHibernate获取SessionFactoryiBatis获取SqlMapSession获取ConnectionJDBC获...
2019-03-31 08:38:18 316
原创 Spring学习系列之JdbcTemplate
0x01 为什么会有JdbcTemplate原因一:代码重复性JDBC编程需要我们获取数据库连接,然后进行增删改查,最后关闭一些资源,然后还要捕获异常。那么这些代码都是重复的,我们可以通过模板方法模式去简化这些代码原因二:异常体系根据JDBC规范,不同实现厂商会抛出SQLException异常,这个异常通过ErrorCode来区分不同错误,但是不同厂商针对同一个错误提供的ErrorCode...
2019-03-27 21:30:03 276
原创 Java内存模型系列(四)线程与锁
0x01 线程实现方式一:使用内核线程实现内核线程(Kernel-Level Thread,KLT)直接由操作系统内核支持。它的线程切换是内核通过调度器对线程进行调度,并将线程任务映射到各个处理器上轻量级进程(Light Weight Process,LWP)就是通常意义上的线程,每个轻量级进程都有一个内核进程支持。缺点:基于内核进程,所以各种线程操作,如创建、析构和同步都需要系统调用...
2019-03-21 18:00:42 142
原创 Java内存模型系列(三)jvm如何实现内存模型
0x01 volatile关键字作用一:保证变量可见性volatile关键字修饰变量,保证此变量的写操作对所有线程的都是立即可见的。但是基于volatile的运算操作不是立即可见的(非线程安全)特殊:以下两种场景需要要保证其操作的原子性一:运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值二:变量不需要与其他的状态变量共同参与不变约束作用二:禁止指令重排序在单线程...
2019-03-21 10:12:59 178
原创 Java内存模型系列(二)原子性、可见性、有序性
0x01 线程通信规则jvm采用了共享内存的方式进行线程通信。即线程都拥有自己的工作内存空间,规定每次都要从主内存读取数据,在自己的工作内存中进行操作,然后回写到主内存。因为这样的通信方式,如果多个线程在交错运行,就容易造成共享变量在某个线程中更新了,但是没有回写到主内存。从而引发并发问题0x02 如何保证原子性原子性:一个操作不会因为线程调度而中断。如基本类型的读写操作如何造成:线程切换...
2019-03-20 17:46:34 135
原创 Java内存模型系列(一)概述
前言Java内存模型完全可以参考Java内存结构,两者都是一种规范。为了帮助虚拟机实现某种功能,后者是为了帮助更好的垃圾回收,而前者则是为了帮助程序员屏蔽一些底层的如操作系统和内存访问的差异。就是为了简化多线程在Java中的编写。jvm虚拟机会实现该规范,让程序员更好的编写多线程代码0x01 基础知识TPS(Transactions Per Second):每秒服务端平均能响应的请求总数缓...
2019-03-11 10:21:09 193
原创 记一次java缓存错误
业务需求简单的一次活动闯关任务,我将关卡配置存放在List,然后每次一些关于关卡的操作都会读取配置。错误出现每次通过某些操作后,该人物相关的关卡进度都出现了错误,比如第1关通过了3次,发现第2关也通过了3次(而且仅在第1关和第3关出现)原因核心:修改了关卡配置在每次达成某些条件后需要计算该关卡的进度,比如该关卡有15次要求,每次达成条件后需要增加次数,此处由于偷懒,并没有再次返回一个D...
2019-03-09 17:17:39 281
原创 new关键字发生了什么系列补充(Java内存结构与垃圾回收问题)
前言学习了之前的一些知识之后,为了给自己学习之前的问题做简单的解答0x01 如何判断垃圾首先通过可达性分析算法分析(没有gc roots),然后在jvm中进行标记,finalize方法中可以取消标记(重新获取gc roots)。判断垃圾这个阶段是在发生gc的时候,垃圾收集器需要根据该方式确定垃圾并回收。0x02 对象在堆内存中如何分配1、是否在TLAB上分配2、jvm参数检查,内存需...
2019-03-09 16:56:20 185
原创 new关键字发生了什么系列补充(OSGi类加载机制)
前言OSGi是基于Java语言的动态模块化规范特点:模块划分、可见性控制更精确模块级热插拔0x01 基础知识Bundle:OSGi中的每个模块称为Bundle,与普通java类库区别不大,都通过jar格式封装,内存存储java package和class。一个Bundle可以生命它所依赖的java package(Import-Package),也可以声明它允许导出发布的java ...
2019-03-09 15:29:58 178
原创 new关键字发生了什么系列补充(Tomcat类加载机制)
前言理解Tomcat的类加载机制有助于我们更好的理解容器是如何加载我们的web应用0x01 类加载机制帮助容器解决了什么问题问题1:部署在同一个服务器上的两个Web应用程序所使用的Java类库可以实现相互隔离问题2:部署在同一个服务器上的两个Web应用程序所使用的Java类库可以共享问题3:服务器需要尽可能保证自身安全不受部署的Web应用程序影响服务器本身依赖的类库应该与应用程序依赖类...
2019-03-09 14:26:09 282
原创 new关键字发生了什么系列补充(HotSpot如何实现垃圾收集)
前言这篇文章是为了补充系列(三)中的垃圾收集算法在HotSpot中是实现枚举根节点枚举根节点就是根据可达性分析从gc roots中分析垃圾,但是gc roots节点有很多(常量、静态属性、栈帧中的本地变量表),如果逐个检查会很消耗性能。问题:gc root太多不能逐个检查,怎么办?HotSpot在类加载完成之后,就把对象内的什么偏移量上是什么类型的数据计算出来,在JIT编译过程中,也会在...
2019-03-08 14:46:03 205
原创 new关键字发生了什么系列(三)垃圾回收
前言对象分配之后,那么在对象不再被需要的时候就需要被回收了0x01 垃圾判断引用计数法:每次引用,都对对象实例的引用计数+1,如果取消引用则-1,为0则是垃圾。但是存在循环引用的bug可达性分析:gc roots分析,就是如果还有变量引用那么就不是垃圾,没有变量引用则是垃圾。可达性分析会造成gc停顿(分析过程中引用不应该变化,所以停顿系统)0x02 垃圾收集流程第一步:判断是否垃圾并标...
2019-03-08 14:44:59 315
原创 new关键字发生了什么系列补充(Java内存结构)
前言这篇文章对应系列(二)而诞生,什么不会学什么。当初在学习的时候其实只是想有个线性的学习过程,但是书籍是做了系统的分模块介绍,并没有给我循序渐进的感觉。而且有时候与实际并没有太多的联系,很多环节不去想就不会对应了(但是还挺有趣)根据Java虚拟机规范,定义了内存区域0x01 程序计数器线程私有(所以生命周期随线程而生死)作用:线程从中获取所需要执行的字节码的行号指示器,如果执行的是本地...
2019-03-04 18:21:56 157
原创 new关键字发生了什么系列(二)对象分配
前言当new关键字找到了需要实例化对象的类信息,那么就可以开始在内存中分配对象实例了。(此处就开始涉及Java内存结构了)0x01 内存分配通过new关键字每次我们都创建了该类的一个新对象实例,既然要创建对象实例,就要有个存放对象实例的地方。所以需要在内存中分配一块空间给这个对象实例问题:分配在内存的哪里?分配在Java内存结构中的堆区问题:如何分配?分配方式根据内存是否规整决定,...
2019-03-04 17:25:12 226
原创 new关键字发生了什么系列(一)类加载
new关键字发生了什么系列(一)类加载0x01 类加载过程加载目的:class文件无论是通过文件、网络的形式获取都将转换成二进制流加载到内存中。通过类的全限定名获取类的二进制流将字节流代表的静态存储结构转换为方法区的运行时数据结构(此处的方法区涉及到java内存结构)在内存中生成一个代表该类的Class对象,作为方法区这个类的各种数据访问入口在这里我们可以知道class文件被加载...
2019-03-04 15:25:48 477
原创 new关键字发生了什么系列(概述)
new关键字发生了什么系列(概述)前言本系列是在阅读完《深入理解java虚拟机》后的整理。其中跳过了字节码相关的内容。整理的内容多数为书中内容。整理的思路是想把这些理论知识整合到平时的代码中。如有错误,请指正。正文JDK、JRE、JVM对比JDK(Java Development Kit)是Java语言开发工具包,包含Java程序设计语言,Java虚拟机,Java API类库JRE(...
2019-03-04 15:25:12 536
原创 Spring Data
Spring Data0x01 介绍简化数据库访问,支持NOSQL数据库,如MongoDB、Neo4j、Redis、Hbase同时也支持JDBC和JPA 0x02 JPA只要继承Repository接口即可
2018-01-06 00:26:55 236
原创 Spring Boot - 全局异常处理
Spring Boot 全局异常处理0x01 问题场景在使用spring boot开发的时候好奇为什么网页访问返回页面而ajax访问返回json数据,以及如何处理异常为什么使用@ExceptionHandler无法处理4040x02 前置知识了解servlet中处理错误的方式spring mvc和spring boot异常捕获只是在请求过程中捕获异常,意味着只捕获进
2018-01-06 00:12:28 519
原创 Shell 十三问整理
在chinaunix看了网中人的shell 十三问,做了一些整理或者复制 原文地址:http://bbs.chinaunix.net/thread-218853-1-1.html基础名词1. 命令行(Command Line) 组成:Literal + Meta Literal 就是一些字母单词,组成命令的Meta 特殊保留字符,对于shell有特殊意义重点
2016-04-10 13:38:59 378
原创 存储器
存储器也是由电平触发的D型触发器改造的存储器8位锁存器 由8个1位锁存器构成,1位锁存器也是电平触发的D型触发器1次存8位 输入是8位,输出是8位8次存1位 使用到8-1选择器 1. 通过3-8译码器,选择8位中的一位赋予写入值,并写入锁存器 2. 通过8-1选择器,通过3位二进制地址选择一位输出选择器2-1选择器 选择一行开关或者一个锁存器的输出8-1选择器
2016-04-09 15:41:47 311
原创 触发器
振荡器触发器 针对不同场景,触发器的输入名称也会变化,比如从R-S触发器到电平触发的D型触发器, 1. R-S触发器 Reset-Set 复位/置位功能表 数据端S 保持位R 输出Q 0 1 0 1 1 1 0 0 Q 1 0 Q功能表简化 X代表不
2016-04-09 10:34:28 405
原创 错误 clang: error: linker command failed with exit code 1 (use -v to see invocation)
Xcode 7.2.1原因:因为新建项目的时候自动创建了一个包含main()函数的.m文件。如果你再次创建一个.m文件包括main()函数的话,就会出现这样的错误。(猜测)解决方案: 点击左侧项目 --> Build Phases --> Compile Sources --> 里面可能有许多文件。但是只能存在一个.m文件包含main()函数。所以删除掉项目自动创建的main.m文
2016-02-15 13:17:55 647
原创 怎么读Man Page和BNF
之前其实嫌弃麻烦,感觉在学习过程中要花很多时间在读man page上。基本是直接搜索问题找答案,但不知道怎么解决,下次遇到类似的又该怎么办。感觉这个知识不在自己的掌控下很难受。所以这次在网上找了找怎么读man page。鸟哥的我稍微有看,但是其实我是想知道关于参数的那些括号啊,分号啊有一些什么意思。然后我找到了BNF,我觉得这个的帮助是很大的。
2016-02-08 17:05:12 793
转载 gentoo 无线网络配置
源地址:http://www.jianshu.com/p/683fcf66c222安装安装net-wireless/wpa_supplicant包emerge --ask wpa_supplicant配置Set for Gentoo net.* scrips,tell the network script to use wpa_supplicant.
2015-02-04 21:56:50 1362
原创 线性表
/* 线形表 功能:插入、删除、遍历、数值查找、序号查找、创建、长度查询、排序 动态内存分配,可以扩大容量*/# include # include # include # define SIZE 100;# define ADD 20;typedef struct{ int * pHead; int len;}Sqlist;void init (Sqlis
2014-11-18 16:52:43 198
转载 龙芯8089d - gentoo - 终端(字符)界面无线连接方法
龙芯8089d - gentoo - 终端(字符)界面无线连接方法1、rfkill list检查2个是否锁定 hard block 用Fn+F5 可能要多按几次 soft blcok 用ifconfig 你的无线网卡名 up2、安装wireless-tools 以及 wpa_applicant3、iwlist scanning 扫
2014-09-10 15:11:47 1108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人