- 博客(57)
- 资源 (1)
- 收藏
- 关注
原创 java常见面试问题(四)
一、SpringMVC执行流程1、用户发送一个请求过来,DispatcherServlet接收到请求后,将请求信息交给处理器映射器(HandlerMapping)2、HandlerMapping根据用户的Url请求,查找匹配url的Handler,并返回一个执行链3、DispatcherServlet再请求处理适配器(HandlderAdpter)调用相应的Handler进行处理并返回ModelAndView给DisPatcherServlet4、DispatcherServlet将M.
2021-10-20 22:18:44
682
2
原创 java常见面试问题(三)
一、什么是缓存穿透?缓存击穿?缓存雪崩?怎么解决?1、缓存穿透:缓存中查不到,数据库也查不到。解决方式:方式1、对参数进行合法性校验。方式2、将数据库中没有查到结果的数据也写入缓存。这时要注意为防止Redis被无用Key占满,这一类缓存的有效期要设置得短一点。方式3、引入布隆过滤器,在访问Redis之前判断数据是否存在。要注意布隆过滤器存在一定的误判,并且布隆过滤器只能加数据不能减数据。2、缓存击穿?缓存中没有,数据库中有。一般是出现在存数据初始化以及Key过期了的情况。他的问题在于
2021-10-19 22:28:20
141
原创 java常见面试问题(二)
1、java内存模型?1、程序计数器;是一块较小的内存的空间,它作用可以看作是当前线程所执行字节码的行号指标器。如果线程正在执行的是一个java方法,这个计数器记录的是正在执行虚拟机字节码指令地址,如果正在执行的是Natvice方法(非java代码实现的方法)这个计数器值则为空。2、java虚拟机栈;与程序计数器,java虚拟机栈也是线程私有的,它的生命周期与线程相同。每个方法被执行的时候都会同时创建一个栈帧,用于存储局部变量,操作栈,动态链接,方法出口等信息。3、本地方法栈;与虚拟机栈所发挥的
2021-10-18 22:25:22
168
原创 java面试常见问题(一)
一、java如何开启线程?怎么保证线程安全?答:线程与进程的区别:进程是操作系统进行资源分配的最小单元。线程是操作系统进行任务分配的最小单元,线程隶属于进程。如何开启线程?1、继承Tread类,重写run方法。2、实现Runnable接口,实现run方法。3、实现Callable接口,实现call方法。通过FuTureTask创建一个线程,获取到线程执行的返回值。4、通过线程池来开启线程。怎么保证线程安全?加锁:1、jvm提供的锁,也就是Synchronized关键字。2.JDK提供的各种锁Lo
2021-10-16 00:08:03
135
原创 缓存与数据库双写不一致的问题及解决方式
一般而言,我们在更新数据库时会把redis的值删除掉,然后第一次查询时从数据库查询并且更新到redis中。但从数据库查询然后更新到redis中这并不是原子操作,可能出现并发问题。问题描述:当线程1正常更新数据库并删除redis的数据 ,在线程2第一次查询时,线程3更新数据并删除redis的数据,这时线程2才执行到更新redis,就会出现数据库与缓存双写不一致的问题。使用redisson读写锁来解决@RequestMapping("/getStock") public Strin
2021-10-15 15:59:12
312
原创 redis与redisson实现分布锁的两种方式
redis实现方式:package cn.ping.redislock.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.web.bind.annotation.GetMapping;import org.springf
2021-10-13 18:00:42
154
原创 shiro使用md5加盐加密认证与授权
数据表user:maven配置:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apa
2021-10-07 23:50:30
217
原创 高并发编程学习笔记(一)之线程基础
基础概念CPU核心数和线程数的关系核心数:线程数=1:1 ;使用了超线程技术后—> 1:2CPU时间片轮转机制(RR调度)由操作系统控制,会导致上下文切换,花费5~2万时钟周期。什么是进程和线程进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源线程:CPU调度的最小单位,必须依赖进程而存在。澄清并行和并发并行:同一时刻,可以同时处理事情的能力并发:与单位时间相关,在单位时间内可以处理事情的能力高并发编程的意义、好处和注意事项好处:充分利用cpu的资源、
2020-07-14 09:08:40
120
原创 springMVC上传文件名乱码解决
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8" 因为默认是iso编码 p:maxUploadSize="5400000"></bean>
2020-07-05 13:16:31
540
原创 通过Spring Data ElasticSearch 来使用ElasticSearch
通过一个小案例来学习Spring Data ElasticSearch创建一个Spring Boot工程pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.
2020-06-30 15:02:16
6959
原创 使用kibana来操作ElasticSearch(二)
聚合aggregations聚合可以让我们极其方便的实现对数据的统计、分析。例如:什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如何?实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现实时搜索效果。基本概念Elasticsearch中的聚合,包含多种类型,最常用的两种,一个叫桶,一个叫度量:桶(bucket)桶的作用,是按照某种方式对数据进行分组,每一组数据在ES中称为一个桶,例如我们根据国籍对人划分,可以得到中国桶、
2020-06-29 18:26:21
231
原创 使用kibana来操作ElasticSearch(一)
.基本概念Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。对比关系:索引(indices)--------------------------------Databases 数据库类型(type)-----------------------------Table 数据表 文档(Document)----------------Row 行 字段(Field)-------------------Columns 列 概念说明:索
2020-06-29 17:42:01
2784
原创 使用poi工具类导出数据到excel表(解决ajax提交无法下载的问题)
maven: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency>
2020-06-28 18:05:42
1509
原创 分布式事务解决方案之2PC协议的两种方案
什么是2PC?2pc即是两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,p是指准备阶段,C是指提交阶段。在计算机部分关系数据库如Oracle、Mysql支持两阶段提交协议1,准备阶段:事务管理器给每个参与都发送Prepared消息,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。(Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后
2020-05-14 14:17:18
890
原创 分布式事务之CAP理论与Base理论
分布式事务的基础概念,与本地事务不同的是,分布式系统之所以叫分布式,是因为提供服务的各个节点分布在不同的机器上,相互之间通过网络交互。不能因为有一点网络问题就导致整个系统无法提供服务,网络因素成为了分布式事务的考量标准之一,因此,分布式事务需要更进一步的理论支持。CAP理论理解capcap是 Consistency、Availability、Partition tolerance三个词语的缩写。分别表示 一致性、可用性、分区容忍性。如下图,是商品信息管理的执行流程:整体执行流程如下:1、商品服
2020-05-13 12:26:51
310
原创 centos7.x 下Elasticsearch的单机安装
centos7下安装ElasticSearch 需要先安装jdk1.8以上,jdk1.8在centos7的安装注意:出于安全考虑,elasticsearch默认不允许以root账号运行。创建一个用户:useradd ping设置密码:passwd ping上传安装包,并解压:更改elasticsearch所属用户和用户组 chown -R ping:ping elasticsea...
2020-04-28 17:07:09
208
原创 fastDFS整合Spring Boot的使用
什么是FastDFSFastDFS是由淘宝的余庆先生所开发的一个轻量级、高性能的开源分布式文件系统。用纯C语言开发,功能丰富:文件存储文件同步文件访问(上传、下载)存取负载均衡在线扩容适合有大容量存储需求的应用或系统。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。FastDFS的工作架构图FastDFS两个主要的角色:Tracker Ser...
2020-04-28 14:48:06
462
原创 centos7.x 静态IP的配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33修改bootproto=staticonboot=yes在最后加上几行,IP地址、子网掩码、网关、dns服务器IPADDR=192.168.227.136GATEWAY=192.168.227.2NETMASK=255.255.255.0DNS1=119.29.29.29D...
2020-04-27 23:40:32
109
原创 fastDFS在centos7x上安装 踩坑过程与解决方法与使用nginx访问FastDFS
安装gcc(编译时需要)FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gccyum install -y gcc gcc-c++后面会用到解压命令(unzip),所以这里可以用yum把unzip 也装一下yum install -y unzip zip安装libeventyum -y install l...
2020-04-27 23:28:50
654
原创 spring boot 与spring mvc 整合的文件上传以及绕过网关
pom.xml:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> ...
2020-04-27 15:38:45
519
原创 三种解决ajax 的跨域问题的方式
什么是跨域跨域是指跨域名的访问,以下情况都属于跨域:跨域原因说明示例域名不同www.jd.com 与 www.taobao.com域名相同,端口不同www.jd.com:8080 与 www.jd.com:8081二级域名不同item.jd.com 与 `miaosha.jd.com为什么有跨域问题?跨域不一定会有跨域问题。因为跨域问题是浏览器对于...
2020-04-27 13:03:29
343
原创 spring IOC与DI的理解
spring 的优势方便解耦,简化开发通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。什么是程序的耦合?耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及...
2020-04-22 21:21:30
84
原创 spring aop 基本理解
什么是AOP?与OOP(面向对象)对比。传统的OOP开发中的代码逻辑是自上而下的,而在这个过程会产生写横切性的问题。而这些问题又与我们主业务逻辑关系不大,会散落在代码的各个地方,造成难以维护的问题。AOP编程思想就是把这些横切性的问题和主业务逻辑进行分离,从而直到解耦的目的。AOP 的作用及优势作用:在程序运行期间,不修改源码对已有方法进行增强。优势:减少重复代码提高开发效率维护...
2020-04-22 18:16:00
124
原创 SpringMVC 源码解析(SpringMVC 中三大组件详解)(二)
SpringMVC 源码解析(一)SpringMVC 中三大组件详解:1,处理器映射器2,处理器适配器3,视图解析器处理器映射器:它指的是:RequestMappingHandlerMapping 是在 Spring 的 3.1 版本之后加入的。它的出现,可以让使用者更加轻松的去配置 SpringMVC 的请求路径映射。去掉了早期繁琐的 xml 的配置它的配置有两种方式:都是在 s...
2020-04-16 15:00:02
241
原创 SpringMVC 源码解析(深入理解springmvc)(一)
SpringMVC 的执行过程分析:首先,我们先来看一下 springmvc 官方文档中提供的执行过程图通过此图,我们可以看到其实都是由前端控制器负责找到要执行的控制器方法。这个前端控制器就是SpringMVC 的核心控制器 DispatcherServlet搭建基于SpringMVC简单的web应用web.xml<?xml version="1.0" encoding="UTF...
2020-04-15 20:50:00
776
原创 redis持久化的两种方式RDB与AOF
如何实现Redis数据持久化(redis默认开启RDB模型)如果我们redis服务器宕机了,就会导致原来访问redis的请求全部到了mysql数据库,这个时候mysql数据库离崩溃就不远了确保我们重启redis服务器还能将绝大部分的数据恢复进内存,怎么办?是不是就要把内存数据保存到硬盘中便于恢复RDB模型:就是每隔一段时间,定时保存,有点像mysql中进程用到的mysqldump优势:...
2020-04-13 17:05:18
104
原创 redis常用数据结构与安装使用
概念: redis是一款高性能的NOSQL系列的非关系型数据库redis的安装与使用:1、准备工作(安装gcc依赖)yum -y install gcc-c++ 2、下载并解压源码包cd /usr/local #进入/usr/local目录wget http://download.redis.io/releases/redis-5.0.0.tar.gz #下载redistar -...
2020-04-13 16:03:55
103
原创 MYSQL数据库设计规范与结构优化
一、MYSQL数据库设计规范1、数据库命名规范a、采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线’_'组成;b、命名简洁明确(长度不能超过30个字符);c、例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个前缀;d、除非是备份数据库可以加0-9的自然数:user_db_20151210;2、数...
2020-04-11 15:16:40
186
原创 mysql 的 sql语句与索引优化(二)
索引是什么?MySQL官方对索引的定义为:索引(index)是帮助mysql高效获取数据的数据结构。可以得到索引的本质:索引是数据结构MySQL默认存储引擎innoDB只显式支持B-tree(从技术上来说是B+Tree)索引索引分类 :普通索引:即一个索引只包含单个列,一个表可以有多个单列索引唯一索引:索引列的值必须唯一,但允许有空值(主键索引是不能有空值)复合索引:即一个索引包含多...
2020-04-11 13:42:37
292
原创 mysql 的 sql语句与索引优化(一)
这里写自定义目录标题MYSQL可以从哪几个方面进行数据库的优化?如下图所示:SQL及索引优化: 根据需求写出良好的SQL,并创建有效的索引,实现某一种需求可以多种写法,这时候我们就要选择一种效率最高的写法。这个时候就要了解sql优化数据库表结构优化: 根据数据库的范式,设计表结构,表结构设计的好直接关系到写SQL语句。 (反范式设计,允许存在少量的冗余,来提升查询...
2020-04-10 20:34:09
155
原创 JAVA GC学习笔记
什么是垃圾回收?程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了。java有自己的自动垃圾回收机制,学习GC之前先了解常用的GC的算法常见的垃圾回收算法有:引用计数法、标记清除法、标记压缩法、复制算法、分代算法 等1.1引用计数法:引用计数是历史最悠久的一种算法,最早George...
2020-04-03 22:59:16
95
原创 spring boot 与quartz整合(一)
springboot本身可以使用@EnableScheduling注解进行定时任务沿用的springboot少xml配置的优良传统,本身支持表达式等多种定时任务@Component //加入spring容器@EnableScheduling //开启对定时任务的支持public class Myjob { @Scheduled(cron = "*/5 * * * * ?")...
2020-04-01 20:14:18
221
原创 Quartz 学习笔记
Quartz是什么?Quartz能干什么?Quartz是一个任务调度的框架。它可以是你设置的某个时间点执行你设置的任务。如果应用程序需要在给定时间执行任务,或者系统有需要连续维护作业,那么Quartz是理想的解决方案任务持久化: Quartz入门案例:任务类:/** * 执行器,即需要定时执行的“某件事” */public class HolleJob i...
2020-03-31 23:16:59
223
原创 centos7 安装 jenkins 及下载插件失败 踩过的坑
第一步: 因为从jenkins官网下载太慢了,所以选择国内可以下载jenkins的。尽量不要安装老版本jenkins,不然装好后,发现很多插件不支持老版 本的jinkins,就只能被迫选择更新jenkins(更新jenkins也是从国外网址下载安装,我多次更新失败) 先从国内的清华源中下载jenkis :https://mirrors.tuna.tsinghua.edu.cn/jen...
2020-03-30 12:11:14
2180
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人