自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 SpringMVC

MVC概念MVC是一种架构模式,model↔controller↔view,model与view之间不能互相访问。SpringMVC是Spring体系下的轻量级WebMVC框架,核心是controller控制器,用于处理请求,产生响应,mvc下视图...

2020-02-27 18:37:39 218

原创 Spring声明式事务

在执行方法时自动开启或关闭事务的技术,利用AOP自动提交、回滚数据库事务。在进入方法时打开事务,操作成功时提交,遇到运行时异常则回滚。@Transactional声明式事务的注解,若注解在类上则表明该类所有方法都适用于声明式事务,该注解有两个参数:propagation:开启或关闭事务rollBackFor:回滚时机,值为Exception时非运行时异常也会回滚。...

2020-02-27 11:57:40 184 1

原创 Spring中Bean属性的注入方式

1. setter定义一个userDao和一个userService,在userService中定义userDao私有属性,并定义setter方法,然后在xml中建立两个类的声明及配置:<bean id="userDao" class="....." /><bean id="userService" class="......" /> <property na...

2020-02-27 11:37:33 298

原创 Spring中Bean实例化的方式

有三种方式:类构造器,静态工厂,实例工厂。后两种通过调用第一个实现。1. 类构造器Bean:public Class Person(){ private String name; private Integer age; public Person(){} public Person(String name,Integer age){ this.name = name; th...

2020-02-27 00:03:37 114

原创 Linux环境搭建及项目发布

准备:VMware虚拟机、CentOS、Xshell作为终端用于远程连接虚拟机、FlashFXP或WinSCP远程连接虚拟机用于文件传输。在centos中用ifconfig命令获取当前虚拟机的IP,将终端及文件传输工具以当前IP及账号密码连接至虚拟机。JDK安装下载对应版本的JDK,将其压缩包传输至centos;tar -zxvf 文件名 的命令解压JDK安装包。在/etc/profi...

2020-02-23 15:01:16 126

原创 Linux安装软件

Linux安装软件有三种方式:源码包安装,rpm包安装,yum管理rpm包。源码包安装下载源码包(curl,wget)解压(tar)进入到该目录(cd)编译前配置(./configure)编译(make)编译安装(make install)删除时直接make clean将该目录删除即可rpm包安装下载rmp安装包rpm -ivh 软件包 (-i 安装;-v显示详细信息...

2020-02-22 21:37:04 96

原创 docker入门知识

docker是世界领先的软件容器平台。虚拟机与容器虚拟机:我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。容器技术:是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有...

2020-02-21 15:45:01 76

原创 测试工程师入门(二)

黑盒测试黑盒测试用例设计方法—等价类划分、边界值1. 等价类划分把所有可能的输入数据划分成若干子集,然后从每一个子集中选取少数具有代表性的数据作为测试数据,就可以用少量代表性的测试数据。等价类划分法分为:有效等价类和无效等价类有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。无效等价类:无意义的,不符合需求规定的集合。如何用等价类划分设计用例?一般有如下几...

2020-02-20 23:22:46 433

原创 测试工程师入门(一)

1.什么是软件测试在规定条件下对软件系统进行审核、运行、评估,检验软件系统是否满足规定需求或者找出预期结果与实际结果之间的差别。为软件产品的质量和评价提供依据。2.软件测试对象软件程序、与程序匹配的文档、支撑软件运行的配置数据。3.软件测试原则有计划的尽早测试,解决问题的成本越小。成功的测试在于发现迄今未发现的缺陷。测试并不能保证软件100%的没有问题。测试工作的本质都应追溯到用...

2020-02-20 17:53:47 2089

原创 子类继承父类时各种属性的问题

普通属性子类可以继承父类的属性值,后续操作互不影响。静态属性:public class Main7 extends Father{ //static int test = 11; public static void main(String[] args) { test++; Father father = new Father(); System.out.printl...

2020-02-20 16:15:05 2298

原创 Java虚方法与抽象方法的区别

虚方法java中虚方法体现的是多态的特性,java的普通成员方法(没有被static、native等关键字修饰)就是虚方法,它本身就实现虚函数实现的功能------多态。当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。Java虚方法可以理解为java里所有被overriding的方法都是virtual的。抽象方法抽象方法是用abstract修饰的方法,只能声明不能...

2020-02-20 15:22:59 413

原创 Linux常用命令

发行版选择CentOS-7,虚拟机选择VMware10,终端工具选择Xshell-5.0。Linux命令格式: 命令 [选项] [参数1][参数2] (后三项可选)Linux常用命令关机 shutdown -h now (可定时关机,now改为+10表示10min后)重启 shutdown -r now 或 reboot查看目录结构 ls/bin 命令存放目录/boot 启动目录...

2020-02-19 22:28:12 99

原创 servlet执行流程与生命周期

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于...

2020-02-18 17:43:38 154

原创 java垃圾回收

GC用于回收不再使用的内存,主要作用有三点:分配内存、确保引用、回收内存。其回收依据是某个对象没有任何引用(即在有相图中不可达)。垃圾回收算法五种:引用计数算法:对象引用计数器,算法简单,但是效率低,且无法解决互相引用的问题。跟踪回收算法:对象引用图遍历,未被标记的即可回收;压缩回收算法:将堆中活动的对象放到一个区域,未被压缩的即可被清理,性能损耗较大;复制回收算法:将堆分成等大的两个...

2020-02-18 17:22:17 87

原创 JVM的内存组成

JVM包含两块内容:共享区和私有区。共享区包含方法区、堆;私有区包含程序计数器、虚拟机栈、本地方法栈。堆:JVM在内存中最大的一块,存放程序运行时创建的对象实例,也是垃圾回收主要发生的区域。方法区:JVM加载的类的数据、静态变量、常量等,与堆一样为线程共享,垃圾回收会回收常量、类型卸载等信息,但是不会回收静态变量。程序计数器PC:用于记录行号,应用于分支、跳转等场景。虚拟机栈:栈为线程私...

2020-02-18 15:59:43 76

原创 常用数字类型

字节:byte 取值范围:-2(7) ~ 2(7)-1 —— -128~127 占1个字节短整型:short 取值范围:-2(15) ~ 2(15)-1 —— -32768~32767 占2个字节整型:int 取值范围:-2(31) ~ 2(31)-1 —— ±21亿 占4个字节长整型:long 取值范围:-2(63) ~ 2(63)-1 —— 占8个字节单精度浮点:fl...

2020-02-18 14:57:26 252

原创 druid连接池的使用

建立数据库连接耗时耗费资源,一个数据库服务器能够同时建立的连接数也是有限的,在大型的Web应用中,可能同时会有成百上千的访问数据库的请求,如果Web应用程序为每一个客户请求分配一个数据库连接,将导致性能的急剧下降。数据库连接池的意义在于,能够重复利用数据库连接(有点类似线程池的部分意义),提高对请求的响应时间和服务器的性能。连接池中提前预先建立了多个数据库连接对象,然后将连接对象保存到连接池中...

2020-02-17 15:48:19 351

原创 对于一个给定的链表,返回环的入口节点,如果没有环,返回null

思路:遍历链表,将节点存入Set,遇到重复节点即返回。import java.util.*;public class Solution { public ListNode detectCycle(ListNode head) { if(head == null){ return null; } Set set = ...

2020-02-14 15:55:33 478

原创 利用插入排序对链表进行排序

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } *///直接插入...

2020-02-14 14:05:31 240

原创 在O(n log n)时间内使用常数空间复杂度对链表进行排序

用归并排序,链表存储的归并排序 时间复杂度O(nlogn)空间复杂度 O(1)归并排序的一般步骤为:1)将待排序数组(链表)取中点并一分为二;2)递归地对左半部分进行归并排序;3)递归地对右半部分进行归并排序;4)将两个半部分进行合并(merge),得到结果。所以对应此题目,可以划分为四个步骤:1)找到链表中点 (快慢指针思路,快指针一次走两步,慢指针一次走一步,快指针在链表末尾时,...

2020-02-14 11:16:52 230

原创 计算逆波兰式(后缀表达式)的值

运算符仅包含"+","-","“和”/",被操作数可能是整数或其他表达式例如:[“2”, “1”, “+”, “3”, ""] -> ((2 + 1) * 3) -> 9↵ [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6思路:遍历字符串数组,遇到数字就存进栈里,遇到符号就往外弹两个数,将计算结果存进栈。impo...

2020-02-13 21:46:45 184

原创 求给定二叉树的最小深度

最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。解法一:递归1、最开始想到每一个父亲节点的最小深度都是其子节点最小深度数加一。2、当本节点为空时,返回深度0;3、当本节点的左孩子和右孩子为空的时候,返回深度1;4、当左孩子为空,右孩子非空时,返回右孩子的最小深度加一5、当右孩子为空,左孩子非空的时候,返回左孩子的最小深度加一6、最后一种为左右孩子都非空的情况,返回左右孩子...

2020-02-13 14:39:02 545

原创 Redis在Java中的应用

第一步:添加 Jedis 依赖想要在 Java 中使用 Redis 缓存,需要添加相关的Jar包依赖,打开Maven仓库的网站:https://mvnrepository.com/ ,搜索Jedis,在pom中引入即可。第二步:使用 Redis 连接池跟数据库连接池相同,Java Redis也同样提供了类redis.clients.jedis.JedisPool来管理我们的Reids连接池对...

2020-02-12 21:55:22 707

原创 Redis入门

1. Redis概述在我们日常的Java Web开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用关系型数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间...

2020-02-12 14:33:46 125

原创 HashSet底层原理

HashSet概述HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet实现对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层Has...

2020-02-11 16:34:02 237

原创 HashMap底层原理

在java编程语言中最基本的数据结构有两种,数组和链表。数组:查询速度快,可以根据索引查询;但插入和删除比较困难;链表:查询速度慢,需要遍历整个链表,但插入和删除操作比较容易。hashmap是数组和链表组成的,数据结构中又叫“链表散列”。HashMap底层实现HashMap本质是一个一定长度的数组,数组中存放的是链表。HashMap实现了Map接口,Map接口对键值对进行映射。Map中不...

2020-02-11 15:36:27 94

原创 java栈溢出与堆溢出

基本类型跟就是不可实例化的,可以直接初始化、赋值、运算。不可调用方法,不可放入容器(要求必须是类实例才行)。包装类型就是把基本类型变成一个类实例,一定要new才产生,可以调用方法,可以放入容器。首先要搞清楚堆栈里放的什么东西:栈存储运行时声明的变量——对象引用(或基础类型, primitive)内存空间,堆分配每一个对象内容(实例)内存空间。一个变量可以先后指向多个对象实例;数组、链表等可...

2020-02-10 23:28:49 447

原创 try与finally中都有return时的执行问题

try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 try 中的 return 语句先执行,finally 语句后执行,但try中的 return 并不是让函数马上返回结果,而是 return 语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回。但此时会出现两种情况:① 如果finally中也有r...

2020-02-10 22:48:09 326

原创 Java中Synchronized的用法

synchronized用法synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象,一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞,其他线程仍然可以访问该对象中的非synchronized...

2020-02-10 21:53:01 410

原创 String、StringBuffer、StringBuilder区别

① 可变与不可变String类是一个不可变类,即创建String对象后,该对象中的字符串是不可改变的,直到这个对象被销毁。StringBuffer与StringBuilder都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,是可变类。由于String是不可变类,适合在需要被共享的场合中使用,当一个字符串经常被修改时,...

2020-02-10 17:54:52 101

原创 Java程序定时输出图表

使用的技术:Quartz调度器+Echarts1. Quartz调度器Quartz简介Quartz是一个完全由java编写的开源作业调度框架。尽管Quartz框架整合了许多额外功能, 但就其简易形式看,简单地创建一个实现org.quartz.Job接口的java类即可。Job接口包含唯一的方法:public void execute(JobExecutionContext context)...

2020-02-10 17:02:08 365

原创 c3p0与Druid对比

1. 数据库连接池数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放...

2020-02-10 11:53:41 5668

原创 java深复制与浅复制

一. 浅复制当一个类需要有拷贝的功能,需实现Cloneable接口,但该接口缺少一个clone方法,其主要功能是为类提供一个功能合适的公共clone()方法,使用时需重写Object类的clone()方法。通过这种方法实现的复制为浅复制,即复制得到的对象与原对象指向同一个内存地址,修改其中一个对象的属性,其他对象会随之发生改变。例如:public class Student impleme...

2020-02-04 17:28:47 93

原创 equals()与hashcode()

equals()与hashcode()都是Object类定义的方法,实际使用时可override,在覆盖时都须遵守各自的通用约定。一. 覆盖equals()1. 覆盖的时机当某个类的超类未覆盖equals(),而该类又有自身的逻辑相等概念,就需覆盖。覆盖后的equals()用于判断对象在逻辑上是否相等,而非是否指向同一对象。2. equals()的通用约定自反性:对象必须等于其自身;对...

2020-02-02 23:56:25 69

原创 Singleton单例模式

一. 单例模式的定义Singleton指仅仅被实例化一次的类,通常用于代表一个无状态的对象或本质上唯一的系统组件。二. 单例模式的特点单例模式只能有一个实例。单例类必须创建自己的唯一实例。单例类必须向其他对象提供这一实例。三. 单例模式的实现方法用私有构造器导出一个final修饰的静态成员:public class Instance{ public stati...

2020-02-02 22:41:36 139

原创 Java创建对象的构建器(builder)模式

当某个类的可选参数很多时,用构造器或静态工厂方法创建对象就显得相当麻烦。通常有这几种方式:重叠构造器在这种模式下,提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,依此类推,最后一个构造器包含所有的可选参数,例如:public class Person { //必要参数 private final int id; private f...

2020-01-19 15:39:36 1490

原创 静态工厂方法相比于构造器之优劣

什么是静态工厂方法?通常我们获取类的实例是采用new,通过构造方法获取一个实例。除此以外,我们还能够用一个静态方法来对外提供自身实例,即静态工厂方法。静态工厂方法的优势2.1 静态工厂方法可以有自己的名称构造方法与类同名,当出现多个重载的构造方法时区别仅在参数列表,用户易于混淆。而静态工厂方法可以为不同的参数列表定义不同的名称,突出不同静态工厂方法之间的区别。2.2 不必每次调用时都创...

2020-01-19 15:05:16 213

空空如也

空空如也

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

TA关注的人

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