- 博客(62)
- 资源 (10)
- 收藏
- 关注

原创 深入理解JVM(四):垃圾收集器和内存分配策略
1.哪些内存该回收我们要讨论内存的回收,先要判断哪些内存要回收。前面我们介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈这三个区域随着线程而生,随着线程而灭。这几个区域的内存分配和回收都具有确定性,在几个区域就不需要过多的考虑回收的问题,因为方法结束或者线程结束,内存自然就跟着回收了。而Java堆和方法区则不一样,需要我们去研究。1.1堆中需要回收的对象堆中存放着...
2018-10-19 15:09:11
241
原创 Mysql语句的整理
(1)创建表之后指定主键先指定唯一约束alter table 表名 add unique (列名) ;再添加主键约束 alter table 表名add primary key (列名);如果需要为自动增长在设置自动增长alter table 表名 modify 列名int auto_increment; --------设置自动增长...
2020-04-14 11:06:55
267
原创 bootstrap3下拉菜单点击之后怎么改变背景颜色
看了一下官网的例子,当点击的时候,a外层的li会添加一个open类,然后a就会应用.nav .open>a的样式,其中设置了背景色为灰色,你需要自己设置一个优先级高的选择器,然后在里面设置background-color: transparent;。比如给a添加一个id=“hello”,然后设置#hello{background: transparent;}。Update1:.ope...
2020-04-06 20:49:25
2680
原创 Pyinstaller 打包
参考:https://blog.youkuaiyun.com/weixin_42052836/article/details/82315118
2019-12-09 11:11:56
304
原创 Mybatis查询无数据的时候
1.如果返回值是List、Map这种集合类,会先执行new语句,再赋值。所以判断是否有数据时,只能用size==0来判断。2.如果是普通的对象,不会new,所以可以使用是否为null来判断是否有数据。...
2019-01-03 16:45:01
1269
原创 mybatis批量删除的foreach标签
Talk is cheap. Show me the code.我们先来看一下代码,mapper接口的方法如下:int delDataFilesByIds(@Param("ids") String[] ids);mapper的xml文件如下:<delete id="delDataFilesByIds" parameterType="java.lang.String"
2019-01-03 16:02:36
7559
1
原创 mybatis中传递单个String类型的参数
使用mybatis接口参数只有一个string的时候 如果不指定@Param 的话mybatis去会把parameterType参数默认成接口的参数类型然后对于xml里的#{a}参数 去调用该类型下参数a 的get/set方法然后就报错了。 使用了@Param注解 mybatis就会一一对应赋值就不会导致这个错误。接口如下:xml文件如下:报错如下:改成如下就可以了:...
2018-12-28 08:59:54
6961
原创 volatile关键字
volatile关键字的两层语义一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,就具备了两层语义:1.保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新指对其他线程来说是立即可见的。2.禁止指令重排序。有两层意思:(1)当程序执行到volatile变量的读操作或者写操作时,在其前面的更改肯定全部进行完成,且结果已经对后面的操作可见...
2018-11-29 10:48:23
188
原创 final关键字
final关键字1.修饰类当final修饰类的时候,表明这个类不能被继承。final类中的成员变量可以根据需要设置为final,但是需要注意的是final类的所有方法都会隐式的指定为final方法。2.修饰方法使用final修饰方法的原因有两个,一个是把方法锁定了,防止任何继承类修改它的含义。第二个是效率,在早期的Java实现版本中,会将final方法转为内嵌调用。但是方法过于庞大的话,...
2018-11-29 09:50:34
186
原创 ThreadLocal
1.作用ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。可以总结为一句话:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。至于ThreadLocal为什么可以解决多线程程序并发问题...
2018-11-25 22:12:27
260
1
原创 内存泄露
1.什么是内存泄露内存泄露的定义:对象已经没有被应用程序使用,但是垃圾回收器没有办法移除它们,因为还在引用着。简而言之,对象是可达的但是不再使用。我们可以看一下下面的图方便我们理解。上面图中可以看出,里面有被引用对象和未被引用对象。未被引用对象会被垃圾回收器回收,而被引用的对象却不会。未被引用的对象当然是不再被使用的对象,因为没有对象再引用它。然而无用对象却不全是未被引用对象。其中还有被引...
2018-11-25 18:55:23
159
原创 深入理解JVM(六):虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java中,类型的加载、连接和初始化过程都是程序在运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性。Java里天生的动态扩展语言特性就是依赖运行期动态加载和动态连接这个特点实现的。1. ...
2018-10-28 19:02:04
284
原创 深入理解JVM(五):类文件结构
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。...
2018-10-24 11:02:41
187
原创 深入理解JVM(三):内存溢出
在Java虚拟机规范的描述中,除了程序计数器之外。虚拟机内存的其他几个运行区域都有发生OutOfMemoryError(OOM)异常的可能。1.Java堆溢出Java堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制来清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。来看一下代码:public class HeapO...
2018-10-15 19:07:17
359
原创 深入理解JVM(二):Java内存区域
运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包含以下几个运行时数据区域:程序计数器、Java虚拟机栈、本地方法栈、Java堆...
2018-10-10 13:51:51
235
原创 SpringBoot(四):SpringBoot与数据访问(未完待续)
1、简介对于数据访问层,无论是SQL还是NOSQL,SpringBoot默认采用整合SpringData(SpringData是Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷)的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。引入各种xxxTemplate,xxxRepository来简化我们对数据访问层的操作。对我们...
2018-10-09 10:23:56
177
原创 数据源的知识
数据库链接的建立和关闭是极其耗费系统资源的操作。通过DriverManager获取的数据库连接,一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完后立即关闭连接。频繁的打开、关闭连接将造成系统性能的低下。(原生的JDBC)对于共享资源的情况,有一个通用版的设计模式:资源池。用于解决资源的频繁请求、释放所造成的性能下降。为了解决数据库连接的频繁请求、释放,JDBC2.0...
2018-10-07 20:39:54
272
原创 SpringBoot(三):Web开发
引入依赖在使用SpringBoot开发web时,我们先得引入web模块的启动器的依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <...
2018-10-07 10:37:15
2999
原创 Spring的学习(四):Web中的Spring
Spring通常用来开发Web应用。SpringMVC的执行过程:我们可以从以下的图来分析SpringMVC的的执行过程。1、客户端在发送请求的时候,会调用DispatcherServlet,Dispatch是SpringMVC的入口,DispatcherServlet本身也是一个Servlet,会调用Service方法,接着会调用doDispatch方法。(下面的都是在Dispatch方...
2018-10-06 21:08:32
219
1
原创 SpringBoot内置条件注解
有关@ConditionalOnXxx相关的注解这里要系统的说下,因为这个是我们配置的关键,根据名称我们可以理解为具有Xxx条件,当然它实际的意义也是如此,条件注解是一个系列,下面我们详细做出解释@ConditionalOnBean:当SpringIoc容器内存在指定Bean的条件@ConditionalOnClass:当SpringIoc容器内存在指定Class的条件@Conditiona...
2018-10-04 22:10:38
1808
原创 Spring Boot(二):Spring Boot中的Starter介绍
一、简介添加Starter使用步骤:创建SpringBoot应用,选中我们需要的模块(在ide创建的时候选择模块或者在pom文件中添加starter依赖),我们在使用Web开发时,选择的是spring-boot-starter-web。SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量的配置就可以了运行起来自己编写核心业务代码二、Starter原理介绍在使用...
2018-10-04 22:06:57
18891
4
原创 代理模式
定义代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。为什么要用代理模式?中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用。开闭原则,增加功能:我们可以通过给代理类增加额外的功能来扩展委托类的功能,这样我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。有哪几种代理...
2018-10-04 18:28:03
179
原创 Spring的学习(三):面向切面的Spring
介绍如果要重用功能的话,最常见的面向对象技术是继承或者委托。但是,如果在整个应用中都使用相同的基类,继承往往会导致一个脆弱的对象体系;而使用委托可能需要对委托对象进行复杂的调用。切面提供了取代继承和委托的另一种可选方案,而且在很多场景下更清晰简洁。在使用切面编程时,我们仍然在一个地方定义通用功能,但是可以通过声明的方式定义这个功能以何种方式在何处应用,而无需修改受影响的类。横切关注点可以被模块...
2018-10-03 20:05:18
354
原创 Spring的学习(二):装配Bean
Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系。当描述bean如何进行装配时,Spring具有非常大的灵活性,它提供了三种主要的装配机制:在XML中进行显示配置在Java中进行显示配置隐式的bean发现机制和自动装配1.自动化装配beanSpring从两个角度来实现自动化装配:组件扫描:Spring会自动发现应用上下文中所创建的bean自动装配:...
2018-10-03 15:25:19
178
原创 Java中的注解
1.了解注解注解很重要,未来的开发模式都是基于注解,注解是一种趋势,现在已经有不少人开始使用注解了,注解是JDK1.5之后才有的新特性。包含在java.lang.annotation包中,它是附加在代码中的一些元信息,将一个类的外部信息和内部成员联系起来,在编译、运行时进行解析和使用。Java内置了一些注解,还支持自定义注解,一些知名的框架都有自己实现的自定义注解,也可以自己定义注解供使用。注...
2018-09-30 10:39:13
683
原创 Spring的注解
@Import 注解可以普通类导入到 IoC容器中@Import注解就是之前xml配置中的import标签,可以用于依赖第三方包中bean的配置和加载在4.2之前只支持导入配置类在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean1)@Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名2)ImportSelector:返回需要导入...
2018-09-27 21:10:27
126
原创 SpringBoot(一):Spring Boot入门
一、简介Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。简化了Spring应用开发的一个框架整个Spring技术栈的一个整合J2EE开发的一站式解决方案优点:快速创建独立运行的Spring项目和主流框架集成使用嵌入式的Servlet...
2018-09-25 21:47:45
922
原创 计算机网络
1.计算机网络体系结构五层协议1.应用层:为特定的应用程序提供数据传输服务,例如HTTP、DNS等。数据单位为报文。2.运输层:为进程提供通用数据传输服务。运输层协议包括两种:传输控制协议(TCP)、用户数据协议(UDP)。传输控制协议TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据协议UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP主要提供完...
2018-09-25 15:16:39
517
原创 IOC的工作过程
1.如何创建BeanFactory工厂构建的入口在AbstractApplicationContext类的refresh方法中。我们可以从一个例子来入手 public class test { private ApplicationContext context; @Test public void test1(){ context = new ClassPathXmlAp...
2018-09-20 16:45:28
3213
原创 数组(刷题更新)
数组的常见题型1.次数超过数组长度一半的那个数字(或者众数)核心代码:public int findMoreThanHalfNum(int[] numbers) { int length = numbers.length; if (length == 0) return 0; int num = numbers[0], count = 1;...
2018-09-19 21:21:38
207
原创 树(刷题更新)
树常用操作:1.按层遍历:题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:将每个节点放入对列中。依据对列先进先出的特点,顺序遍历树。直到队列为空。代码:import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Queue;public class Solution_2...
2018-09-17 16:39:56
524
原创 分布式知识
大型网站架构演化发展历程1.初始阶段的网站架构大型网站都是从小型网站发展来的,网站架构也是一样,从小型网站架构逐步演化而来的。小型网站最开始没有多少人访问,只需要一台服务器就绰绰有余。应用程序、数据库、文件等所有资源都在一台服务器上。2.应用服务和数据服务分离随着业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这时候就需要...
2018-09-14 10:43:07
455
原创 位操作(刷题更新 )
位运算&:按位与运算,两个都为1时,才为1。|:按位或运算,两个都为0时,才为0。^:异或运算,两个位相同位0,相异为1。~:取反,0变1,1变0。<<:左移,左移若干位,低位补0。>>:右移,各编译器处理方法不一样,有的补符号位,有的补0。常用小技巧1.判断奇偶使用a&1==0代替a%2==02.交换两个数使用异或:...
2018-09-12 22:06:57
339
1
原创 享元模式
定义享元模式:运用共享技术有效的支持大量细粒度的对象。面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。享元模式正是为解决这一类问题而诞生的。享元的目的是为了减少不会要额内存消耗,将多个对同一对象的访问集中起来,不必为每个访问者创建一个单独的对象,以此来降低内存的消耗。在享元模式中...
2018-09-07 18:27:01
201
原创 外观模式
定义外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。结构图具体编码子系统们: SubSystemOne类public class SubSystemOne { public void methodOne(){ System.out.println("子系统方法一!"); }}...
2018-09-07 11:30:05
684
原创 装饰模式
定义装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类模式更加灵活。结构图装饰模式的简化: (1) 只有一个ConcreteComponent时,可以考虑去掉抽象的Component类,把Decorator作为ConcreteComponent的子类。 (2) 如果只有一个ConcreteDecorator类,可以将Decorator类和Concr...
2018-09-07 11:02:25
1311
1
原创 组合模式
定义组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使用用户对单个对象和组合对象的使用具有一致性。当需求中是体现部分和整体层次的结构时,或者你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑使用组合模式。组合模式为处理树形结构提供了一种较为完美的解决方案,它描述了如何将容器和叶子进行递归组合,使得用户在使用时无须对它们进行区分...
2018-09-07 09:41:12
165
原创 桥接模式
定义桥接模式:将抽象部分与它实现部分分离,使它们都可以独立地变化。桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模...
2018-09-06 16:28:57
1816
1
原创 适配器模式
定义适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。系统的数据和行为都正确,但是接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有的对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。在GoF设计模式中,对设计模式讲了两种类型,类适配器和...
2018-09-06 14:52:49
133
原创 原型模式
定义:原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式就是从一个对象再创建另外一个可制定的对象,而且不需要知道任何创建的细节。结构图Prototype:原型抽象类,保存类的数据和申明克隆自身的接口。ConcretePrototype:具体原型类,不同的实现会导致克隆的方式不同。Client:客户端类。对于Java而言,那个原型抽...
2018-09-06 11:04:19
295
Jackson进行JSON解析和序列化jar包
2018-06-18
个性化搜索引擎
2018-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人