自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(155)
  • 资源 (2)
  • 收藏
  • 关注

原创 stream 妙用

数组和集合的相互转换List<String> list = FileUtils.readLines(new File("E://a.txt"),"utf-8");String origin = list.get(0);String[] strsT = origin.split("\\t");List<String> filterResults = Arrays.stream(origin.split("\\t")).filter(StringUtils::isNotBlank

2021-10-14 14:30:52 170

原创 SpringBoot启动流程 (3-3)

SpringBoot启动流程,核心分为两个步骤:创建 SpringApplication对象调用SpringApplication run 实现启动同时返回当前的容器上下文分析流程:创建 SpringApplication对象 Springboot容器初始化操作获取当前应用启动类型 原理:判断当前classpath是否有加载我们的servlet类 返回servlet web启动方式webApplicationType 分为三种类型:响应式启动 (Spring5新特性)None不会

2021-07-12 11:01:31 187

原创 springboot 源码 (3-2)

加载配置 config@SpringBootApplication --> @EnableAutoConfiguration --> @Import(AutoConfigurationImportSelector.class)List configurations = getCandidateConfigurations(annotationMetadata,attributes);获取spring-boot-configurations下面的META-INF/ spring.fac

2021-07-07 10:26:30 153

原创 springboot starter (3-1)

自定义startermaven 依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId></dependency><!-- 能够给开发者引入该jar包后 有一定提示 --><dependency> <groupI

2021-07-02 15:10:44 100

原创 springMVC源码适配器模式 (2-4)

适配器模式实现Controllerpublic interface Controller { void hanlder();}public class HttpController implements Controller { public void hanlder() { System.out.println("HttpController"); }}public class AnnotationController implements Contr

2021-06-28 11:59:50 65

原创 springMVC源码分析 (2-3)

DispatcherServlet源码分析SpringMVC核心的就是DispatcherServlet,所有的请求都会转发到DispatcherServlet,让后在通过DispatcherServlet执行具体的控制层(Handler) 返回modelAndView给客户端视图展示。DispatcherServlet与Servlet关系关系:DispatcherServlet继承FrameworkServlet继承HttpServlet流程执行关系:HttpServlet service方法

2021-06-24 11:42:24 57

原创 springMVC基础 (2-2)

注解方式启动MVC@Configuration@ComponentScan(basePackages = {"com.mayikt.controller","com.mayikt.service"})//@EnableWebMvc@EnableAsyncpublic class SpringMvcConfig extends WebMvcConfigurationSupport { //@EnableWebMvc 等于开启SpringMVC注解方式 //@Configuration

2021-06-22 10:59:20 65

原创 springMVC基础 (2-1)

SpringMVCServletSpringMVC是基于Servlet封装的MVC框架Servlet是单例的 在高并发情况下,可能会存在线程安全问题ServletContainerInitializer在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能。每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-

2021-06-22 10:33:52 60

原创 spring循环依赖 (1-6)

spring循环依赖如何底层解决循环依赖原理Map<String, Object> singletonObjects 一级缓存完成对象(对象和属性都已经赋值)Map<String, Object> earlySingletonObjects 二级缓存 不完整对象 对象已经创建但是属性缺没有赋值 早期对象Map<String, ObjectFactory<?>> singletonFactories 三级缓存(只初始化,没有给属性赋值对象) 存放

2021-06-11 17:22:37 60

原创 spring事务实现原理 (1-5)

spring事务实现原理Spring声明事务源码分析开启@EnableTransactionManagement开启事务注解@Import(TransactionManagementConfigurationSelector.class)继续加载AutoProxyRegistrar、ProxyTransactionManagementConfiguration对象 (这两个对象会被spring 管理)会将该类InfrastructureAdvisorAutoProxyCreator注册ioc容器

2021-06-10 10:59:01 97

原创 spring Aop通知调用链源码分析 (1-4)

Aop通知调用链源码分析责任链模式public interface GatewayHandler { /** * Boolean返回类型的作用是干嘛? 使用递归停止下一步 */ public Boolean service();}public class BlacklistHandler implements GatewayHandler { public Boolean service() { System.out.println("&g

2021-06-10 10:30:05 128

原创 spring aop源码分析 (1-3)

SpringBean的生命周期进入到刷新的方法refresh();finishBeanFactoryInitialization()初始化所有单例 对象preInstantiateSingletons(); 初始化所有的单例对象 注意:非懒加载getBean() → doGetBean() 先查询该对象是否有初始化过,没有话 就创建注册到IOC容器中createBean()创建对象 判断对象如果是为单例的情况下调用该方法doCreateBean()创建IOC对象createBeanInsta

2021-06-09 10:15:46 88

原创 spring 源码之bean 生命周期 (1-2)

spring bean 生命周期

2021-06-07 13:54:07 72

原创 spring 源码之核心注解 (1-1)

spring 源码_1

2021-06-07 13:42:01 104

原创 使用 aop 做统一日志处理

controller 层做 aop,这样就减少了代码的冗余,统一处理日志@Aspect@Componentpublic class WebLogAspect { private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution(public * com.itat.controller.*.*(..))") public void webLog() {

2020-07-04 18:42:19 2981

原创 手动实现 spring 事务

手动实现 spring 事务手动实现 spring 事务替换 @Transactional## 自定义注解@Target({ ElementType.METHOD })@Retention(RetentionPolicy.RUNTIME)public @interface ExtTransaction {}TransactionUtils// 编程事务(需要手动begin 手动回滚 手都提交)@Component@Scope("prototype") // 每个事务都是新的实例 目的

2020-07-04 17:38:03 713

原创 NIO_缓冲区和通道

Java在1.5之后提供了新的IO通信框架,NIO和普通IO的区别是NIO是基于channel和Buffer来进行操作的,这和传统的IO是有一些区别的,传统的IO是基于管道流的方式进行数据传输,而NIO的数据首先需要添加到buffer中,之后通过channel来进行传输。Buffer缓冲区不同的数据类型都是自己的缓冲区,但是在NIO中比较通用的是ByteBuffer,通过allocate和allocateDirect来创建缓冲区,第一种缓冲区是在堆中创建,第二种缓冲区会在操作系统的内存中创建,第二种缓冲

2020-06-02 17:43:01 421

原创 线程间通信

线程间通信的模型有两种:共享内存和消息传递题目如下:有两个线程A、B,A线程向一个集合里面依次添加元素"abc"字符串,一共添加十次,当添加到第五次的时候,希望B线程能够收到A线程的通知,然后B线程执行相关的业务操作。方式一:使用 volatile 关键字基于 volatile 关键字来实现线程间相互通信是使用共享内存的思想,大致意思就是多个线程同时监听一个变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。这也是最简单的一种实现方式public class TestSync { /

2020-05-28 18:08:10 213

原创 mysql 索引

索引是帮助mysql 高效获取数据的排序好的数据结构索引结构数据 (二叉树,红黑树,hash 表,B-Tree)

2020-05-27 17:04:13 118

原创 深入Java内存模型

JMMjava内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。可以避免像c++等直接使用物理硬件和操作系统的内存模型在不同操作系统和硬件平台下表现不同,比如有些c/c++程序可能在windows平台运行正常,而在linux平台却运行有问题。物理硬件和内存首先,在单核电脑中,处理问题要简单的多。对内存和硬件的要求,各种方面的考虑没有在

2020-05-26 16:56:09 104

原创 redis

redis 是单线程的,NIO的异步的 (redis 会把并发的请求排队)SETNX实现分布式锁 incr

2020-05-22 16:19:49 103

原创 springboot[第三篇]开启声明式事务

配置数据源spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Drivermybatis.mapper-locations=classpath*:mybatis/*Mapper.xmlmybatis.type-a

2020-05-18 14:55:31 125

原创 SpringBoot[第二篇]用JdbcTemplates访问Mysql

工程依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector

2020-05-18 13:58:21 110

原创 面试题总结<basic>

1.&// 数&1来判断一个数是奇数还是偶数 如果结果为0为偶数,结果为1为奇数,如4&1 –> 0偶数int c= 11;if((c&1)==0){//结果 0 是偶数 System.out.println("---");}2. "= ="和equals 区别"= =“操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用”= ="操作符。如果一个变量指向的

2020-05-12 11:08:07 131

原创 JVM的内存模型

JVM的内存模型方法区(Method Area)方法区主要是放一下类似类定义、常量、编译后的代码、静态变量等,在JDK1.7中,HotSpot VM的实现就是将其放在永久代中,这样的好处就是可以直接使用堆中的GC算法来进行管理,但坏处就是经常会出现内存溢出,即PermGen Space异常,所以在JDK1.8中,HotSpot VM取消了永久代,用元空间取而代之,元空间直接使用本地内存,理论上...

2020-04-24 18:32:46 96

原创 hashmap 问题

HashMap为什么是线程不安全的我们知道hashmap的扩容因子是0.75如果hashmap的数组长度已经使用了75%就会引起扩容,会新申请一个长度为原来两倍的桶数组,然后将原数组的元素重新映射到新的数组中,原有数据的引用会逐个被置为null。就是在resize()扩容的时候会造成线程不安全。另外当一个新节点想要插入hashmap的链表时,在jdk1.8之前的版本是插在头部,在1.8后是插在尾...

2020-04-24 10:31:28 195

原创 Vue教程17(methods,watch及computed的区别)

一、案例实现1.普通DOM操作实现<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <...

2020-04-15 17:46:54 154 1

原创 Vue教程16(Router-嵌套)

Vue路由嵌套注意 通过children 配置的 path 中的路由地址 不能加 / 开头。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ini...

2020-04-15 17:12:54 130

原创 Vue教程15 (router传值)

Vue路由传参第一种方式实现路由传参的第一种方式是在 router-link 的 to 跳转地址后拼接通过工具调试,我们发现传递的数据实际保存在了 $route.query 对象中,那么我们就可以通过此对象来获取了<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"&g...

2020-04-15 15:14:02 213

原创 Vue教程14 (router)

路由router-基本使用后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;在单页面应用程序中,这种通过hash改变来切换页面的方式,称...

2020-04-15 14:52:27 179 1

原创 Vue教程13(ref 和 $refs)

ref和$refs的使用refref 被用来给元素或子组件注册引用信息, 引用信息将会注册在父组件的 $refs 对象上,如果是在普通的DOM元素上使用,引用指向的就是 DOM 元素,如果是在子组件上,引用就指向组件的实例。$refs$refs 是一个对象,持有已注册过 ref 的所有的子组件。ref使用我们通过 ref 属性 获取值<h3 id="myh3" ref="myh...

2020-04-14 15:53:18 238

原创 Vue教程12(组件综合案例)

组件案例-评论列表实现效果组件添加好后,我们通过点击 发表评论 来添加内容到 评论列表中。实现的逻辑是1.通过点击 发表评论 触发点击事件 调用组件中methods中定义的方法2.在methods中定义的方法中 加载保存中 localStorage中的列表数据到list中3.将 录入的信息 添加到list中,然后将数据保存到 localStorage中4.调用父组件中的方法来刷新列表数...

2020-04-13 14:35:24 880 1

原创 Vue教程11 (父子组件传值)

Vue教程(组件-父子组件传值)父组件传值给子组件现在我们想要将Vue实例中的 msg 的值传递给 子组件,实现步骤如下1.父组件,可以在引用子组件的时候, 通过 属性绑定(v-bind:) 的形式, 把 需要传递给 子组件的数据,以属性绑定的形式,传递到子组件内部,供子组件使用2.在子组件中有个 props 属性,该属性中保存的都是 父组件传递给子组件的数据,注意:props 中的数据,...

2020-04-13 14:19:56 117

原创 Vue教程10(组件-切换)

Vue 组件切换案例一、通过v-if控制实现<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> ...

2020-04-13 14:10:34 166

原创 Vue教程09(组件-data和methods)

Vue的data和methods属性在上篇文章的基础上我们继续来介绍下Vue组件中的data和methods属性,这两个属性和我们介绍的Vue实例中data和methods属性很类似,使用方式也是一样的data属性使用注意 data 属性 我们需要显示的返回一个对象,而不是返回一个具体的数据<!DOCTYPE html><html lang="en"><...

2020-04-13 14:02:26 530

原创 Vue教程08(组件)

Vue组件组件是可复用的 Vue 实例,且带有一个名字。1.通过extend方式我们先通过最原始的方式来实现看看,首先通过Vue.extends方法来定义一个全局组件。template 就是组件将来要展示的HTML内容 // 1.使用 Vue.extend 来创建全局的Vue组件 var com1 = Vue.extend({ template: "<h3>这是个V...

2020-04-13 13:51:55 162

原创 Vue教程07(指令)

自定义指令1.效果实现定义全局指令:v-focus==> document.getElementById(‘search’).focus()// 定义全局的指令 v-focusVue.directive("focus",{ bind:function(el){ }, inserted:function(el){ el.focus() ...

2020-04-13 12:03:34 117

原创 Vue教程06(过滤器)

过滤器概念:  Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示(" | ");分类:过滤器分为全局过滤器和局部过滤器(私有过滤器)<!DOCTYPE html><html lang="en"><...

2020-04-10 15:23:08 140 1

原创 Vue教程05(综合小案例)

小案例实现对表单数据的添加,删除和关键字查询的操作表单布局使用bootstrap来设置table,在vscode中安装bootstrap插件删除记录删除记录的实现逻辑:点击删除链接,获取要删除记录的id,然后调用数组的splice方法来移除记录,==注意:方法名称不要使用delete! ==数组常用的循环方法比较循环方法说明forEach不可终止循环so...

2020-04-07 17:22:21 661 1

原创 Vue教程04(v-if & v-for)

(v-if和v-for指令)v-if和v-show的作用有点类似 案例如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-sc...

2020-04-07 16:02:02 165

springMVC 源码

springMVC 源码

2014-11-18

jsoup api

网络爬虫

2014-08-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除