- 博客(77)
- 资源 (6)
- 收藏
- 关注
原创 Java 汉字 转 拼音/首字母
汉字 转 拼音/首字母代码片如下:import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;import net...
2018-11-19 14:14:20
2427
原创 谈谈对Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spr...
2018-10-15 09:18:12
422
原创 面试题_抽象类和接口的区别
含有abstract修饰符的class 即为抽象类。abstract类不能创建实例对象;含有abstract的方法的类必须定义为abstract class ;abstract class 里的方法不必是抽象的;抽象类中定义抽象方法必须放在具体子类中实现;所以呀,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有 方法,那么,子类也必须定义为抽象类。接口(interface...
2018-10-15 08:11:14
1040
原创 SpringMVC工作原理
首先,我们先来认识一下SpringMVC的主要组件前端控制器(DisatcherServlet):接收请求,响应结果,返回可以是json,String等数据类型,也可以是页面(Model)。处理器映射器(HandlerMapping):根据URL去查找处理器,一般通过xml配置或者注解进行查找。处理器(Handler):就是我们常说的controller控制器啦,由程序员编写。处理器...
2018-10-12 18:42:35
289
原创 redis缓存穿透、雪崩和缓存失效的预防和解决
缓存穿透: 认识 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。 解决办法: 对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不...
2018-10-12 09:42:38
295
原创 分布式锁与实现——基于Redis实现
概述目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要...
2018-10-12 08:30:52
206
原创 redis持久化方法对比分析
前言最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另...
2018-10-11 19:21:46
179
原创 Redis 数据类型
redis是键值对的数据库,有5中主要数据类型:字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset) 几个基本的命令:函数 说明 keys * 获得当前数据库的所有键 exists key [key ...] 判断键是否存在,返回个数,如果key有一样的也是叠加数 del k...
2018-10-11 14:09:47
187
原创 redis之有序集合类型(Zset)——排行榜的实现
Redis有序集合和Redis集合类似,是不包含 相同字符串的合集。它们的差别是,每个有序集合 的成员都关联着一个评分,这个评分用于把有序集 合中的成员按最低分到最高分排列。使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作。 因为元素是在插入时就排好序的,所以很快地通过评分(score)或者 位次(position)获得一个范围的元素。 访问有序集合的中间元素同...
2018-10-11 13:57:49
1171
原创 事务的隔离级别
TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。 TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读...
2018-10-11 09:53:47
372
原创 MySQL 主从复制原理
引言MySQL 主从复制原理是相当基础的知识,很久没有接触过 MySQL 主从复制了,因为我这边负责的业务暂时没用使用 MySQL 主从复制。既然有些忘记了,现在我重新复习记录下。 MySQL 主从复制介绍 MySQL 的主从复制是一个异步的复制过程(但一般情况下感觉是实时同步的),数据库数据从一个 MySQL 数据库(我们称之为 Master)复制到另一个 MySQL 数...
2018-10-11 09:33:37
334
原创 MySQL大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:字段 尽量使用TINYINT...
2018-10-10 20:29:12
232
原创 索引失效原因总结
1. 随着表的增长,where条件出来的数据太多,大于15%,使得索引失效(会导致CBO计算走索引花费大于走全表)2. 统计信息失效 需要重新搜集统计信息3. 索引本身失效 需要重建索引下面是一些不会使用到索引的原因索引失效 1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上。 ...
2018-10-10 19:58:30
323
原创 sql优化的几种方法
在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id...
2018-10-10 19:38:05
6213
原创 数据库中char与varchar类型的区别
在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下两者的区别。首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然...
2018-10-10 19:06:55
2010
原创 Mysql索引类型normal,unique,full text的区别
问题1:mysql索引类型normal,unique,full text的区别是什么?normal:表示普通索引unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为uniquefull text: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可...
2018-10-10 18:46:20
2005
原创 Java IO层次体系结构
在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了 Java I/O主要包括如下几个层次,包含三个部分: 1.流式部分――IO的主体部分; 2.非流式...
2018-10-10 16:29:12
4616
1
原创 MySQL字段类型
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值...
2018-10-10 10:49:13
230
原创 MySQL两种引擎的区别
文字描述 : Innodb引擎Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SE...
2018-10-10 09:13:16
8921
2
原创 java IO流面试总结
1.什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别答案Bit最小的二进制单位 ,是计算机的操作部分 取值0或者1Byte是计算机操作数据的最小单位由8位bit组成 取值(-128-127)Char是用户的可读写的最小单位,在Java里面由16位bit组成 取值(0-65535)Bit 是最小单位 计算机 只能认识 0或者1 8...
2018-10-09 19:43:33
653
原创 关于==和equals的区别和联系,这么回答就可以
长篇大论的话,我这里就不多写了,相信大家入门java 的时候就知道个大概了,这里想表述的是,如果有人问你《关于==和equals的区别》,该怎么回答完美呢?可以这样说总结的来说: 1)对于==,比较的是值是否相等 如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址 2)对于e...
2018-10-09 19:00:55
340
原创 10个Java抽象类和接口的面试题
1. Java抽象类可以有构造函数吗?可以有,抽象类可以声明并定义构造函数。因为你不可以创建抽象类的实例,所以构造函数只能通过构造函数链调用(Java中构造函数链指的是从其他构造函数调用一个构造函数),例如,当你创建具体的实现类。现在一些面试官问,如果你不能对抽象类实例化那么构造函数的作用是什么?好吧,它可以用来初始化抽象类内部声明的通用变量,并被各种实现使用。另外,即使你没有提供任何构造函数...
2018-10-09 18:49:48
1004
原创 Java反射机制
1.Java反射机制的作用?可以通过配置文件来动态配置和加载类,以实现软件工程理论里所提及的类与类,模块与模块之间的解耦。反射最经典的应用是spring框架。1.1 动态性质运行时生成对象实例; 运行期间调用方法; 运行时更改属性1.2 Java反射机制能实现的功能在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的方法和属性 ...
2018-10-09 16:19:03
205
原创 JVM看这一篇就够了
jvm 总体梳理jvm体系总体分四大块:类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优当然这些知识点在之前的文章中都有详细的介绍,这里只做主干的梳理这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点击右键下载了放大查看。 类的加载机制主要关注点:什么是类的加载 类的生命周期 类加载器 双亲委派模型什么是类的加载...
2018-10-08 14:43:47
1004
原创 Set去重原理和内部实现
Set可以去重,即不会出现重复元素。分析Set去重的原理非常简单,Set的内部是通过Map来实现的。我们选取平时常的HashSet来分析 private transient HashMap<E,Object> map; private static final Object PRESENT = new Object(); /** * C...
2018-10-07 10:15:14
13836
转载 单点登录原理与简单实现
一、单系统登录机制1、http无状态协议 web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必...
2018-10-06 19:31:16
139
原创 java中创建线程的三种方法以及区别
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程下面让我们分别来看看这三种创建线程的方法。 ------------------------继承Thread类创建线程-------...
2018-09-30 08:44:34
211
原创 线程的生命周期
1.线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程。(1)生命周期的五种状态新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。例如:Thread t1=new Thread();就绪(runnable)线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例...
2018-09-30 08:36:37
138
转载 什么是 CDN
618电商节、双十一购物狂欢节,到底是什么在支撑数以万计的秒杀活动?这就不得不提一直隐姓埋名的 CDN 了,注意不是 CSDN,而是 CDN,CDN,CDN!其全称是 Content Delivery Network,即内容分发网络。 那到底 CDN 是什么鬼,我们还得从西天取经说起…… 1300年前,唐僧师徒取经要跋涉十万八千里,历经九九八十一难,一路打怪升级,最终才能...
2018-09-30 08:23:47
365
原创 ReenTrantLock可重入锁和synchronized的区别
可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的,有什么区别,说白了就类似于操作系...
2018-09-29 19:14:53
177
原创 Java:悲观锁、乐观锁的区别及使用场景
定义:悲观锁(Pessimistic Lock):每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。乐观锁(Optimistic Lock):每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数...
2018-09-29 18:49:35
257
原创 一句话看待抖音
人类无声无息地成为娱乐的附庸,毫无怨言,甚至心甘情愿,其结果是我们成了一个娱乐至死的物种。———(美)尼尔·波兹曼《娱乐至死》
2018-09-26 09:48:01
335
1
原创 Java时间戳和时间的相互转换
/** * 时间转换成时间戳 * @param s 传入的时间 * @return 返回时间戳 * @throws ParseException */ public static String timeTotimeStamp(String s) throws ParseException{ SimpleDateFo...
2018-09-26 09:02:02
4555
原创 SpringCloud zuul Cookie跨域丢失问题
什么是跨域:协议、端口号、域名 都相同才是同一个域 只要有一个不同就算是跨域 主域名相同,子域名不同也算跨域email.qq.com和zone.qq.com就属于主域相同,子域不同,也算是跨域需要注意的是:协议不同(eg:https和http)或者端口号不同造成的跨域,前端是无法解决的 1.我所遇到的跨域问题说明:端口号不同。2.由于我们做的项目采用的是SpringClo...
2018-09-22 09:46:52
2440
转载 Java枚举 — 很少被使用,或许是因为真正了解它的人太少了
前言 你代码中的flag和status,都应该用枚举来替代看了很多篇文章,还是这篇更容易理解,记录一下很多人都说,枚举在实际开发中很少用到,甚至就没用到。因为,他们的代码往往是这样子的:public class Constant { /* * 以下几个变量表示英雄的状态 */ public final static int STATUS_WALKING = 0;//走 ...
2018-09-19 11:31:34
4616
1
原创 SpringBoot修改jsp后重启问题解决
解决方案如下 在配置文件application.properties中添加如下配置:server.jsp-servlet.init-parameters.development=true 是1.5版本的用法2.0版本需要使用:server.servlet.jsp.init-parameters.development=true...
2018-08-15 11:39:42
1984
原创 isELignored的作用
JSP的一个主要特点是它支持表达语言(expression language)。JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流程和循环控制功能。自制标记也有自定义函数的功能,因此基本上所有seriptlet能实现的功能都可以由JSP替代。在JSP中,建议尽量使用EL而使JSP的格式更一致。 在web.xml的<jsp-prope...
2018-08-12 21:27:57
4641
1
原创 【SpringBoot】项目名设置
使用不同SpringBoot版本,指定访问项目路径的项目名,使用的配置也不一样,博主也不例外的跳进了坑。以下是两种配置方式: SpringBoot版本 配置 1.x server.context-path=/demo 2.x server.servlet.context-path=/demo ...
2018-08-10 11:45:54
21459
1
原创 Linux安装Mysql
(一)删除老版本的MySQL 在安装前要先确定系统是否已经安装了其他版本的MySQL,如已安装其他版本的MySQL,需先删除后再安装新版本。经本文亲测,采用如下方式删除老版本的MySQL或MySQL残留文件作为方便。1.执行yum命令,删除MySQL的lib库,服务文件rpm -qa | grep -i mysqlyum -y remove mysql-libs*2.执行fi...
2018-08-07 15:30:17
178
原创 购物车-Cookie和Session各自的优缺点
1. cookie cookie是由服务器产生,存储在客户端的一段信息。它定义了一种Web服务器在客户端存储和返回信息的机制,cookie文件它包含域、路径、生存期、和由服务器设置的变量值等内容。当用户以后访问同一个Web服务器时,浏览器会把cookie原样发送给服务器。通过让服务器读取原先保存到客户端的信息,网站能够为浏览者提供一系列的方便,例如在线交易过程中标识用户身份、安全要求不高的场...
2018-07-26 19:24:42
735
【整理】数据库面试题索引sql优化+数据库SQL优化总结之百万级数据库优化
2018-07-09
腾讯TDW用户手册(海量数据)
2018-07-19
Spark学习资料 超值精装六份
2018-07-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人