自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 activemq安装配置以及启动错误解决方案

根据面向百度编程和报错信息,基本可以确定是jdk版本过低导致的原来ActiveMQ与java的JDK是有版本对应匹配的。我本地安装的activemq的jdk最低版本要求起码要jdk1.8虽然我上周安装了jdk6,但是我的系统变量jdk8的现在读了jdk6,应该是我安装jdk6的路径,包含在了目前配置的路径里因此我怀疑是系统读取jdk版本的优先级别所导致的,所以我将本地安装的jdk1.8在path系统变量中向上移动。尝试再次启动activemq,完美启动成功!...

2021-02-22 18:24:59 615

原创 出现 Request Entity Too Large问题的解决方法

根据经验判断应该是上传文件大小被限制了,检查了应用配置是10M,把它设置成100M,重启服务也不能解决问题。原来我们的tomcat是通过nginx发现服务代理的,问题就出现nginx服务器上,原来nginx默认长传文件的大小是1M,可在nginx的配置中修改。解决方法:1、打开nginx服务的配置文件nginx.conf, 路径一般是:/usr/local/nginx/conf/nginx.conf。2、在http{}中加入client_max_body_size 100m,我这里配置的是100M.

2021-02-21 13:58:49 1892 1

原创 倒排索引学习笔记

概述顺序扫描法(正向搜索法)举个例子:比如我们有大量的文件,文件编号从A,B,C。。。。。。需求:要找出文件内容中包含有java的所有文件需求实现:从A文件开始查找,再找B文件,然后再找C文件,以此类推。。。。。弊端:如果文件数量很多,查找速度慢!!!倒排索引法(反向/倒排搜索法)举个例子:使用新华字典查找汉字,先找到汉字的偏旁部首,再根据偏旁部首对应的目录(索引)找到目标汉字。一、倒排索引法中,索引包括哪些内容?索引的内容包括:1)文档(Document):需要

2020-10-19 22:53:51 284

原创 Java泛型学习理解

一、什么是泛型?Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型参数化类型:把类型当作是参数一样传递<数据类型>只能是引用类型相关术语:ArrayList中的E称为类型参数变量ArrayList中的Integer称为实际类型参数整个称为ArrayList泛型类型整个ArrayList称为参数化的类型ParameterizedType二、为

2020-10-09 17:08:52 205

原创 JDK原生动态代理和CGLIB动态代理原理学习

概述动态代理在Java中有着广泛的应用,比如SpringAOP,Java注解对象获取等等。静态代理的代理关系在编译时就确定了,而动态代理的代理关系是在编译期确定的。静态代理实现简单,适合于代理类较少且确定的情况,而动态代理则给我们提供了更大的灵活性。今天我们来讨论Java中两种常见的动态代理方式:JDK原生动态代理和CGLiB动态代理。JDK 原生动态代理先从直观的示例说起,假设我们有一个接口Hello和一个简单实现HelloImp;接口interface Hello{ String s

2020-10-09 13:44:41 326

原创 ArrayList的迭代操作注意事项

编程过程中常常需要使用到集合,而ArrayList也是我们常常使用的,但是最近在一次删除和增加中出现了一些问题,分享记录下。请看下面两段代码,哪段代码会报错,或者都成功呢。程序运行结果如下:arrayList1的remove方法成功执行。但是arrayList2的remove方法允许抛出ConcurrentModificationException异常为了寻找原因,我们只能看源代码了。因为foreach的本质就是使用的迭代器iterator,所有的Collection集合类都会实现Itera

2020-10-05 10:27:45 182

原创 Java中List去重问题分析

概述我们大家都知道,set集合的特点就没有重复的元素,如果集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除重复的元素,这个就相对比较简单。如下示例输出结果为我们可以看到去重成功了。在面试中被问到List去重问题,大部分回答都是会list和set互转,利用set自动去重的方法去重,但是这样的回答并不会得分。元素为对象类型时当list集合中存储的类型是对象类型的时候,我们就不能简单的只把list集合转换成set集合。我们定义一个对象类:我们使用上面的set

2020-10-04 10:33:19 692 3

原创 (转)深入了解MySQL隔离级别

转自:https://www.jianshu.com/p/8d735db9c2c0什么是事务事务是应用程序中一系列严密的操作。所有操作必须成功完成,否则在每个操作中所有的更改都会被取消,也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种·,当事务中的所有步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤销之前到事务开始时的所有操作。事务的ACID事务具有四个特征:原子性,一致性,隔离性和持久性。这四个特性简称为ACID特征。原子性:事

2020-10-03 21:34:49 150

原创 Spring中用到的设计模式

1.简单工厂模式实现方式:beanfactory,spring中的beanfactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。设计意义:松耦合。可以将原来硬编码的依赖,通过spring这个beanFactory这个工厂来注入依赖,也就是说原来只有依赖方和被依赖方,现在我们引入了第三方-spring这个beanrfactory,由它来解决bea

2020-10-03 19:35:46 107

原创 JVM结构学习笔记

JVM可分为5个部分1.类加载器(Class Loader)2.运行时数据区(Runtime Data Area)3.执行引擎(Execution Engine)4.本地库接口(Native Interface)5.本地方法库(Native Libraies)这其中最复杂的是运行时数据区,又可分为方法区、虚拟机栈、堆、程序计数器,并且方法区和堆是线程共享的,虚拟机栈、本地方法栈、程序计数器是线程隔离的,JVM的结构入下图所示。搞清楚了JVM虚拟机的结构,接下来我们详细讲解它的每一部分。类加

2020-10-02 23:22:20 139

原创 (转)快速安全的往mysql里插入千万条数据

来源:ksfzhaohuijuejin.im/post/5da5b568f265da5b6c4bc13d概述有个需求解析一个订单文件了,并且说明文件可达到千万条数据,每条数据大概在20哥字段左右,每个字段使用逗号分隔,需要尽量在半小时内入库思路1.估算文件大小因为告诉文件有千万条,同时每条记录大概在20哥字段左右,所以可用大致估算一下整个订单文件的大小,方法也很简单使用FileWriter往文件中插入一千万条数据,查看文件大小,经测试大概在1.5G左右;2.如何批量插入由上可知文件比较大,一

2020-10-02 11:30:42 3101 4

原创 Redis持久化和缓存学习理解笔记

Redis持久化:Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化!RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是SnapShot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了。再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何io操作的

2020-10-01 20:58:58 443

原创 前后端分离理解

历史渊源借Jsp来举例,jsp就是一个典型的前后端耦合在一起的典型的计数案例这种模式在以前互联网不那么繁荣,web化趋势还不是那么明显的年代发挥着巨大的作用,但是随着社会技术的不断加深,各种各样的服务都web化以后,其实很多前端展示的东西都变得复杂起来了,jsp这种模板技术就没办法去高效的开发了,其本质原因还是因为前端那个时候没有工程化、模块化和可复用化的思维来做。开发必然会出现各种各样的不协调,还有一些效率低和扯皮的问题,所以从公司项目管理的角度来看,解决这个问题的办法就是解耦,在软件领域中各种复

2020-10-01 11:08:00 2521 1

原创 JVMGC核心内容笔记整理

概述垃圾回收GC是Java非常重要的核心技术之一,Java开发程序员不需要关心对象的内存分配和资源释放,这些都由GC来完成,这使得Java开发者只需要将注意力集中再业务逻辑的处理上。学习GC需要从以下4个方面入手:1.如何判断某个对象是垃圾,需要被回收?2.垃圾回收算法。3.不同内存区域的回收方式4.垃圾收集器的分类如何判断对象是垃圾Java对象被判定为垃圾的标准,没有被其他对象引用,判断方法有两种:1.引用计数算法通过判断对象的引用数量来决定是否要被回收,每一个对象实例都有一个计数器,

2020-10-01 09:36:50 252

原创 Nginx学习理解

概述Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,nginx专为性能优化而开发,性能是极其重要的要求,十分注重效率,有报告niginx能支持高达50000个并发连接数。反向代理正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务被称为正向代理。反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标

2020-09-29 13:41:02 212

原创 Mysql数据优化及建表思路

Mysql千万级大表的优化过程方案概述方案一:优化现有Mysql数据库。优点:不影响限有业务,源程序不需要修改代码,成本最低。缺点:有优化瓶颈,数据量过亿就玩完了。方案二:升级数据库类型,换一种100%兼容Mysql的数据库。优点:不影响现有业务,源程序不需要修改代码,你几乎不需要做任何操作就能升级数据库性能,缺点:多花钱。方案三:一步到位,大数据解决方案,更换newSQL/noSQL数据库。优点:没有数据容量瓶颈,缺点:需要修改源程序代码,影响业务,总成本最高。、优化现有MySQL数据库数据

2020-09-26 20:44:44 1451

原创 深入学习Shiro

概述:Shiro是一款Java安全框架,不依赖任何容器,可以运行在JavaSE和JavaEE项目中,它的主要作用是用来做身份认证、授权、会话管理和加密操作。什么意思?大白话就是判断用户是否登录、是否用来某些操作的权限等。其实不用shiro,我们使用原生的api就可以完成安全管理,很简单,使用过滤器去拦截用户的各种请求,然后判断是否登录、是否拥有某些权限即可。我们完全可以完成这些操作,但是对于一个大型的系统,分散去管理编写这些过滤器的逻辑会比较麻烦,不成体系,所以需要使用解构化,工程化、系统化的解决方

2020-09-26 12:31:30 253

原创 性能优化:Excel导入10w数据

需求说明excel报表导出10w+数据在我们的进出口贸易系统可能由于之前导入的数据量并不多没有对效率有过高的追求。但是到了二次开发版本,我预估导入时Excel 行数会是 10w+ 级别,而往数据库插入的数据量是大于 3n 的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。一些细节数据导入:导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户按照表头在对应列写入相应的数据。数据校验:数据校验有两种:2.字段长度、字段正则表达式校验等,内存内校验

2020-09-24 21:57:40 2884 2

原创 浅谈微服务和SpringCloud

传统的单体应用:所谓的单体应用程序,通俗来说就是把所有的功能全部堆积在一起。这个应用大部分都是一个war包或者jar包。随着业务的发展、功能的增加,多年以后这个单体项目将得越来越臃肿。这样的单体应用在公司创建初期是一种比较好的方案,要快速增加新功能或部署发布都比较简单。不过,随着时间的推移,危机也会慢慢显露出来。任何一个bug都可能导致整个应用瘫痪,正所谓牵一发而动全身。微服务概述:微服务是一种架构风格,即将单体应用划分为小型的服务单元,微服务之间使用http的api进行资源访问操作。在笔者看来.

2020-09-23 13:31:38 584

原创 Saas云服务管理系统架构图

2020-09-20 23:36:31 3471

原创 Mysql索引学习笔记

数据库查询数据方式普通查询数据方式:从数据表第一条位置开始查询,进行逐条查询,直至查找到最后一条,将所有符合的数据找到.索引查询数据方式:先从索引表中查询,定位到大致的区间,再查真实的表创建索引语法创建索引单列索引是基于单个列所建立的索引:create index 索引名 on 表名(列名)查看表中的索引SHOW INDEX FROM 表名删除索引DROP INDEX 索引名 ON 表名代码演示 显示指定表中所有的索引SHOW INDEX FROM emp;

2020-09-17 22:57:03 213 1

原创 深入理解String

知识回顾:八大基本数据类型数据类型大小byte(字节)1(8位)short(短整型)2(16位)int(整形)4(32位)long(长整型)8(64位)float(浮点型)4(32位)double(双精度)8(63位)char(字符型)2(16位)boolean(布尔型)1位概述字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String是每个j

2020-09-05 14:38:36 1461

原创 深入理解hashCode

概述:此处可参考百度百科hashCode()方法的作用1.返回对象的哈希代码值(就是散列码),用来支持哈希表,例如:hashMap,hashSet等待。2.可以提高哈希表的性能3.先看下Object源码的hashCode方法源码注释比较长,可以大概总结为:1.像Hash开头的类,HashMap、HashSet、Hash等等,哈希值代码值可以提高性能。2.实现了hashCode一定要实现equals,因为HashMap底层就是通过这2个方法判断重复对象的。hashCode与equals

2020-09-02 11:14:00 440 1

原创 Mysql数据类型笔记整理

mysql数据类型MySql数据类型含义(有符号)tinyint(m)1个字节 范围(-128~127)smallint(m)2个字节 范围(-32768)~32767mediumint(m)3个字节 范围(-8388608~8388607)int(m)4个字节 范围(-2147483648~2147483647)bigint(m)8个字节 范围(+ -9.22*10的18次方)浮点型(float和double)Mysql数据类型.

2020-08-29 09:59:19 1483

原创 浅谈理解SpringMVC

概述作为企业级Java开发者,你可能开发过一些基于Web的应用程序,对于很多Java开发人员来说,基于Web的应用程序是他们主要的关注点。如果你有这方面经验的话,你会意识到这种系统所面临的挑战。具体来讲,状态管理、工作流以及验证都是需要解决的主要特征。HTTP协议的无状态性决定了这些问题都不那么容易解决。Spring的Web框架就是为了帮你解决这些关注点而设计的。SpringMVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够帮你构建像Spring框架那样灵活和松

2020-08-26 16:04:27 524

原创 深入理解AOP思想

知识回顾OOP(Object Oriented Programing)面向对象编程以对象为基本单位进行程序开发,通过对象间的彼此协同,相互协调,完成程序的构建POP(Producer Oriented Programing)面向过程(方法,函数)编程以过程为基本单位的程序开发,通过彼此间协同,相互调用,完成程序的构建静态代理存在的问题//实现相同的接口public class UserServiceProxy implements UserService { //创建原始对象 pri

2020-08-20 14:35:38 330

原创 Spring开发常用注解记录

Spring部分1.声明bean的注解@Component组件,没有明确的角色@Service在业务逻辑层使用(service层)@Repository在数据访问层使用(dao层)@Controller在展现层使用,控制层的生命2.注入bean的注解@Autowired:按类型匹配如果有多个相同的类型,按名字匹配如果找不到名字,抛出异常3.java配置类相关注解@Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)@Bean 注解在方法上,

2020-08-17 17:46:33 124

原创 浅谈Spring中的@Controller注解

Spring 的 Controller 是单例还是多例?怎么保证并发的安全?controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。@Controllerpublic class ScopeTestController { private int num = 0; @RequestMapping("/testScope") public void testScope() { System.out.pr

2020-08-13 12:05:58 2051

原创 深入理解Docker

关键字:容器,镜像,虚拟机Docker解决的问题由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其它机器上。与虚拟机的比较虚拟机也是一种虚拟化技术,它与 Docker 最大的区别在于它是通过模拟硬件,并在硬件上

2020-08-10 12:01:24 332

原创 深入理解线程池

概述:随着cpu核数越来越多,不可避免的利用多线程技术以充分利用其计算能力。所以,多线程技术是服务端开发人员必须掌握的技术。线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就引入了线程池技术,避免频繁的线程创建和销毁。在Java用有一个Executors工具类,可以为我们创建一个线程池,其本质就是new了一个ThreadPoolExecutor对象。线程池的优势:总体来说,线程池有如下的优势:(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速

2020-07-23 13:30:32 196

原创 浅谈面向对象程序设计

背景面向对象程序设计(简称oop)是当今主流的程序设计范型,它已经取代了20世纪70年代的“结构化”过程化程序设计开发技术,java是完全面向对象的,必须熟悉oop才能编写java程序。面向对象程序设计概述:面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。程序中的很多对象来自标准库,还有一些是自定义的。究竟是自己构造对象,还是从外界购买对象完全取决于开发项目的预算和时间。但是,从根本上说,只要对象能够满足要求。就不必关心其功能的具体实现过程。在oop中,不必关心对

2020-07-22 22:37:58 1349

原创 深入理解Cookie和Session

概念:我们先要了解HTTP是无状态的Web服务器,什么是无状态呢?就像上面夏洛特烦恼中经典的一幕对话一样,一次对话完成后下一次对话完全不知道上一次对话发生了什么。随着网络的不断发展,比如电商中的购物车只有记住了用户的身份才能够执行接下来的一系列动作。所以此时就需要我们无状态的服务器记住一些事情。Cookie:那么Web服务器是如何记住一些事情呢?既然Web服务器记不住东西,那么我们就在外部想办法记住,相当于服务器给每个客户端都贴上了一个小纸条。上面记录了服务器给我们返回的一些信息。然后服务器看到这张小

2020-07-21 23:09:07 213

原创 深入理解乐观锁和悲剧锁

锁的简介:在介绍悲观锁和乐观锁之前,我们先来谈一下什么是锁。锁,在我们生活中随处可见,我们的门上有锁,我们存钱的保险柜上有锁,是用来保护我们财产安全的。程序中也有锁,当多个线程修改共享变量时,我们可以给修改操作上锁(syncronized).当多个用户修改表中同一数据时,我们可以给该行数据上锁(行锁)。因此,锁其实是在并发下控制多个操作的顺序执行,以此来保证数据安全的变动。并且,锁是一种保证数据安全的机制和手段,而并不是特定于某项技术的。悲观锁和乐观锁亦是如此。悲剧锁悲观锁(Pessimis

2020-07-17 20:26:28 363

原创 深入理解HashMap

版本对比:1.JDK1.7:数组+链表2.JDK1.8:数组+链表+红黑树重要变量 /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity, used if a higher value is

2020-07-16 10:20:34 657

原创 Spring 默认把bean设计成单例的原因分析

熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton、prototype、request、session、global session。如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。今天要介绍的是这五种中的前两种,也是Spring最初提供的bean scope singleton 和 prototype。Spring官方文档介绍如下图:单例bean与原型bean的区别如果一个bean被声明为单例的时候,在处理多次请求的时候在Spring

2020-07-16 01:20:20 203

原创 深入理解ConcurrentHashMap

ConcurrentHashMap的简介1.JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点),使用Node + CAS + Synchronized来保证并发安全进行实现。2.JDK1.8版本的数据结构变得更加简单,使得操作也更加清晰流畅,因为已经使用synchronized来进行同步,所以不需要分段锁的概念,也就不需要Segment这种数据结构了,由于粒度的降低,实现的复杂度也增加了3.

2020-07-14 22:35:13 1158

原创 深入理解基本类型和包装类

说明:最简单的理解,基本类型有默认值,而包装类型初始为null。然后再根据这两个特性进行分业务使用,在《阿里开发手册》的规范里所有的POJO类必须使用包装类型,而在本地变量推荐使用基本类型。Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。1、整数:包括int、short、byte、long初始值为0。2、浮点型:float、double初始值为0.03、字符:char初始值为空格,即’’ ",如果输出,在Console上是看不到效果的。4、布

2020-07-12 14:24:26 365

原创 浅谈理解IOC思想

有一些小伙伴参加远程面试,被问到Spring IOC相关的话题,由于理解的不是太深,面试被gg了,因此,写下该篇文章。Spring框架中最经典的两个就是IOC和AOP,其中IOC(Inversion of Control)是什么呢?控制反转,简单来说就是将控制实体Bean的动作交给了Spring容器进行管理。再简单点来说就是例如之前想用一个类,必须new一个,但是使用了Spring那么直接用@Autowired注解或者用xml配置的方式就能直接获得此对象,而且你也不用管它的生命周期啊等等之类的。就不用自己

2020-07-09 15:17:17 439

原创 Java数组小练习

数组1.概念: 用来存储一组相同数据类型的数据的--->容器 将一组数据统一的管理起来2.特点: 数组本身是一个引用数据类型 [] 数组内部可以存储的元素 可以是基本类型 也可以是引用类型 数组是存储在堆内存中的一串连续的地址 如果需要用变量来进行存储 变量空间在栈内存中 变量中存储的数组引用(地址) 数组在初始化时必须指定长度及内部存储元素类型

2020-07-05 18:53:58 258

原创 深入理解动态代理模式

在JDK1.3之后引入了一种称之为动态代理(Dynamic Proxy)的机制。使用该机制,我们可以为指定的接口在系统运行期间动态地生成代理对象,从而帮助我们走出最初使用静态代理实现AOP的窘境

2020-07-02 09:22:05 317

空空如也

空空如也

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

TA关注的人

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