自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

搬砖小松鼠的博客

越努力,越幸运!

  • 博客(152)
  • 收藏
  • 关注

原创 Redis第五篇——大key和热key问题

大key问题大key会影响到服务的性能,比如value非常大的或者集合元素非常多的,那么如何发现呢?(1)scan扫描Redis提供了scan指令可按照一定的偏移量进行扫描(区别于keys命令),可以每扫描一批过一会再扫(2)查询或写入的时候进行统计每次查询或者写入的时候上报当前key的情况热key问题线上的Redis一般都是集群进行部署,对于Redis-Cluster模式,热点的key会导致部分分片的负载非常高而被拖垮。热key主要分为读热key和写热key发现热key

2020-06-29 20:43:30 2787

原创 Redis第四篇——缓存

这一篇和Redis本身关系不大,而是我们在日常将Redis作为缓存使用时会遇到的几个问题缓存穿透关键点:访问一个不存在的key。 当请求一个不存在的key时,缓存就没用了,这样每次请求都直接打到我们后台的DB解决办法:(1)对不存在的key进行缓存(2)使用布隆过滤器布隆过滤器的特点:可保证返回不存在的元素一定不存在,返回存在的元素大概率存下,因此是存在一定的误判率的缓存击穿关键点:对于设置了过期时间的缓存数据,当该数据过期时,此时有大量对该数据的请求,就会导致这波突然的流量

2020-05-30 17:05:27 244

原创 Redis第三篇——集群

前面两篇已经对Redis的基本数据类型,Redis的过期和持久化策略进行了讲述,但即便拥有了恢复的能力,而在故障恢复的这段时间服务也是完全挂掉不可用,对于一个高可用的系统来说,这是完全不能接受的,因此我们要告别单兵作战时代,看看Redis是如何进行集群作战的主从复制Redis主从关系是通过slaveof命令来实现的,调用slaveof命令的服务器为从服务器,命令的参数是主服务器。从服务器通过复制来从主服务器获取数据,复制包含两个过程:同步(sync)和命令传播两个操作:同步:将从服务器的数据状态

2020-05-30 16:54:17 251

原创 Redis第二篇——持久化

Redis之所以高性能,速度快,其中一个原因就是其数据是存储在内存中的,而对于内存中的数据就会遇到以下几个问题:(1)内存中数据过期了怎么处理?(2)内存满了怎么处理?(3)服务故障内存数据丢了怎么处理?过期处理常见的对于设置有过期时间的数据处理方式如下:定时清理在放入数据的时候,为设置了过期时间的数据启动一个定时器,当数据到期时去清理数据。这种方式好处是可以及时清理过期数据,对内存非常友好,但缺点是如果大量的数据在同一时间过期,需要占据非常多的cpu时间去执行清理任务,而Red

2020-05-30 15:17:49 196

原创 Redis第一篇——几种数据类型

标题上写Redis的几种数据类型,主要是与实现这几种数据类型的底层数据结构进行区分的。Redis支持的每种数据类型由其底层数据结构机型实现。几种数据类型1.stringString类型用于存储整数、字符串等,其底层是通过Redis在C语言基础上定义的SDS(Simple Dynamic String 简单动态字符串实现的),其在C字符串的基础上额外记录len和free字段,这样可以加速字符串的一些操作,同时让字符串有了预分配和懒回收的能力预分配:当对字符串进行变更需要进行扩容时,如果字符串的

2020-05-30 14:30:17 197

原创 Tomcat第四篇——生命周期

LifecycleTomcat中进行生命周期管理的接口是Lifecycle,Tomcat中的组件基本都继承了该接口。下面来看看该接口中生命周期方法的定义:Lifecycle定义了四种生命周期状态:init、start、stop、destroy,并且提供了四个方法,并且在接口中定义了关于这四个状态多包含的一些事件,整个状态流转如下图:* The valid state transitions for components that support {@link Lifecycle} *

2020-05-10 22:49:42 249

原创 Tomcat第三篇——一个请求的处理过程

目录一、请求处理流程Connector中的处理Container中的处理二、Connector中对Http协议处理源码解析BIO的处理NIO的处理一、请求处理流程Connector中的处理Tomcat在初始化时会按照xml中配置来初始化不同协议的Connector,Tomcat使用ProtocolHandler来用于扩展不同的协议,包括http协议和ajp协议,在每个协议的内部又依据io类型的不同,分为bio、nio等,组合起来常用的实现类有:Http11Protocol

2020-05-10 01:07:45 304

原创 Tomcat第二篇——启动过程

一、启动类Tomcat的启动涉及到两个类:BootStrap和Catalina类。Catalina类用于启动和关闭Server对象,并通过Digester来解析conf目录下的Server.xml文件。BootStrap类则是一个入口类,入口是main方法。下面来看看源码中Tomcat的启动过程。二、如何调试源码这里介绍一种比较简单的方法:导入jar包调试法。找一个自己配过tomcat的web项目,在pom中引入Tomcat的嵌入jar包,如下图所示。其中版本设置为你自己下载的tomcat版

2020-05-08 22:43:00 263

原创 Tomcat第一篇——概述

一、简介Tomcat服务器是一个开源的、轻量的Web服务器,是目前比较流行的Web服务器之一,在中小型系统和并发量并不是特别大的场景下被广泛的使用。二、下载和目录结构下载可直接到Tomcat的官网进行下载(https://tomcat.apache.org/),在官网的左侧列有Tomcat比较大的版本,如Tomcat 7、Tomcat 8等选择某个大的版本之后,右边就会列出...

2020-05-07 23:49:27 274

原创 mkdir命令使用

mkdir命令用来创建目录,如果没有指定路径,默认在当前目录下创建使用语法mkdir (选项) 参数选项-m<目标属性>或–mode<目标属性>建立目录的同时设置目录的权限;-p 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;(这个选项用于级联创建多层目录)使用例子创建目录mkdir aa创建带权限的目录mkdir -m aa创建多层...

2019-10-19 17:31:56 370

原创 Linux——scp命令使用

scp命令用于跨服务器进行拷贝,区别于本机拷贝命令cp语法scp (选项) 源文件 目标文件选项-1:使用ssh协议版本1;-2:使用ssh协议版本2;-4:使用ipv4;-6:使用ipv6;-B:以批处理模式运行;-C:使用压缩;-F:指定ssh配置文件;-l:指定宽带限制;-o:指定使用的ssh选项;-P:指定远程主机的端口号;-p:保留文件的最后修改时间,最后访...

2019-10-18 10:20:18 265

原创 Spring XML头部配置的理解

Spring XML配置文件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http:...

2019-10-17 23:45:10 845

原创 HTTPS协议经过SpringMVC重定向后变成HTTP协议问题&解决

HTTPS协议经过SpringMVC重定向后变成HTTP协议问题&解决问题详情1.请求的接口https://xxx.xxx.com/deleteModuleDependency.json2.Spring接口代码 @RequestMapping(value = "deleteModuleDependency.json") public ModelAndView delete...

2019-10-10 15:19:15 3265 3

原创 Web服务器和应用服务器

Web服务器和应用服务器Web服务器Web服务器是一个处理HTTP请求的计算机系统。主要功能是存储、处理、传送Web页面到客户端。客户端和服务端之间的通信协议为HTTP常见Web服务器:Apache HTTP Server、Nginx、IIS等应用服务器应用服务器的概念最初用于早起C/S系统中,即指一个软件框架,用于提供创建应用程序服务端实现和应用程序功能的通用方法,也可以指一个应用程序...

2019-10-10 00:04:16 444

原创 程序员Mac开发软件&工具推荐

Mac软件1.PostmanPostman 是一个很强大的API调试、Http请求的工具2.Sequel ProSequel Pro是一款管理 Mysql 的工具,界面简洁易用,你可以一次性连接多个数据库,允许快速访问那些你经常需要访问的数据库3.CheatSheetMac查看快捷键的工具,长按会显示当前软件的快捷键4.PikkaPikka for Mac是一款一款出色的颜色采集软...

2019-08-20 23:40:05 3849

原创 vs2015配置OpenMesh

1.在下载openmesh之前,首先查看电脑操作系统,如图:2.得到系统类型之后,结合自己安装的vs的版本,我的是vs2015,到www.openmesh.org下载指定的版本3.下载之后是exe文件,直接安装,记下安装的目录4.在vs中新建win32的控制台空项目,新建一个源文件test.cpp,然后配置项目属性(1)首先在上方选择模式 ,本文配置时Release

2017-03-21 12:53:29 6320

原创 ssm框架学习---mybatis中缓存

缓存的目的:将部分数据缓存到内存中,提高系统的性能一级缓存:它是sqlsession级别的,每个sqlsession对象内部都有一个hashmap用来存放查询的数据,mybatis中默认时开启的(1)当执行查询时,首先如果是第一次查询,会从数据库中查询并将结果缓存到一级缓存中,以后再查相同的sql就不再发出sql语句,而是直接从缓存中拿(2)如果在两次相同的查询之间,存在inset

2016-12-20 15:02:47 4609

原创 ssm框架学习---mybatis中延迟加载实现

在处理查询结果中,如果需要延迟加载,即属于对查询结果有要求的那种,需要使用resultMap来实现,并结合association或者collection,假设需求时查询订单时延迟加载所关联的用户信息,定义mapper.xml文件如下; <!--配置关联的用户

2016-12-20 13:31:43 2401

原创 ssm框架学习---mybatis中一对多关系的查询

(1)使用resultMap处理一对多关系是,将一对多,多的那部分数据用集合来存储,使用collection标签(2)如果使用resultType来处理,需要手动去重复,然后把多的那部分关系提取出来放到一个list中比如一个客户可能对应多个订单,如下mapper.xml文件定义如下:<!DOCTYPE mapper PUBLIC "-//mybatis.org//DT

2016-12-19 19:57:50 9376

原创 ssm框架学习---mybatis中处理一对一对应关系

1,对于一对一对应关系,有两种方式来实现(1)一种是使用resultType,这个有一个要求就是查询出来的列和返回的java对象的列的名称需要对应,这里我们想要实现依据订单来查询对应订单的下单用户的信息的查询,因此需要们自己建立pojo,首先给出客户,订单,商品的定义类如下:package com.ajin.mybatis.model;/** * Created by ajin on

2016-12-19 17:16:58 2499

原创 ssm框架学习---mybatis中动态sql中的foreach片段

首先查询对象包含一个集合属性,定义为ids如下:package com.ajin.mybatis.model;import java.util.List;/** * Created by ajin on 16-12-16. */public class StudentVo { private Student student; private List ids;

2016-12-19 13:57:27 3164

原创 ssm框架学习---mybatis中动态sql中的sql片段

上面一篇文章中,比如if判断的语句,可以抽取出来组成一个sql片段,方便程序员程序的开发,于是上述的if片段可以定义为如下的sql片段: <!--sql片段 id:sql片段的唯一标识 经验:一般基于单表地定义sql片段,这样可重用性比较高,sql片段中不要包含 where 第一步:定义sql片段 第二步:引用sql片段 -->

2016-12-19 13:34:56 4587

原创 ssm框架学习---mybatis中动态sql中的if片段

1.if判断,比如多个条件查询中,如果某个条件不为空,才将查询内容拼接上去首先还是编写mapper.xml文件如下:<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

2016-12-16 21:37:41 6387 2

原创 ssm框架学习---mybatis中复杂输入输出的处理

1。处理复杂的输入,也就是普通的一个model对应的类不足以包括所有的比如来自前端传递的数据,这时就需要我们建立一个包装类型来囊括我们的user和其它数据如下所示:package com.ajin.mybatis.model;/** * Created by ajin on 16-12-16. */public class UserVo { private User user

2016-12-16 16:13:18 495

原创 ssm框架学习---将本地代码托管到github上

1.进入到本地项目所在目录如下: cd /home/ajin/IdeaProjects/mybatis201612142.初始化本地仓库git init3.将项目内容添加并提交到本地仓库git add .    //使用 . 是添加本地项目所有内容的意思,因为时第一次添加,所以用 .git commit -m “提交说明”4.到github上创建

2016-12-14 19:10:19 1190

原创 ssm框架学习---mybatis单独使用各个文件编写

mybatis作为一个持久层的框架,依据上一篇mybatis框架结构(1)SqlMapConfig.xml,它的配置结构中,当没有和spring整合之前,由mybatis来管理事务和数据源,配置文件如下:<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/d

2016-12-14 14:07:23 1215

原创 ssm框架学习---传统使用jdbc连接数据库的问题

在使用jdbc来操作数据库时,首先要准备对应的数据库连接的jar包,使用jdbc连接数据库的一般代码如下:import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;/** * Created by ajin

2016-12-14 13:19:28 6699

原创 ssm框架学习---开发中使用springMVC接收参数的问题

首先我前端表单代码如下: 登录 登录 用户名: 密   码: 登录   重置 还没有帐号?点击这里注册! 从代码中看到,我提交到doLgoin.action这个路由(1)第一

2016-12-07 18:26:43 23412 2

原创 ssm框架学习---开发中遇到的乱码问题

1。在浏览器访问时遇到乱码的问题遇到这种问题,一般都是字符编码的问题,将编码设置为一致的即可2。获取页面表单参数问题(1)对于数据字段比较少的情况这种情况下,考虑字段比较少,只需要在对应的controller的方法中编写和表单中那么属性一致的参数列表即可(2)

2016-12-07 14:26:03 5692

原创 ssm框架学习---使用ubuntu环境下基于Intel idea搭建ssm环境一些问题总结

首先准备工作:(1)安装jdk对于linux用户,到官网下载jdk后,只需要将文件解压并配置环境变量打开配置文件命令:gedit /etc/profile在打开的文件中加上如下环境如下配置:#set jdk environment  export JAVA_HOME=/home/ajin/program/java/jdk1.8.0_111 export CLASSPAT

2016-12-06 18:05:55 1522

原创 linux的自我修养---安装软件

0、怎么安装应用软件?    我的软件安装在什么地方?    如何删除不要的应用软件?    ……    下面,我们就一起来认识一下这些方面的问题。一、 解析Linux应用软件安装包:    通常Linux应用软件的安装包有三种:    1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。    2) rpm

2016-11-08 20:09:16 360

原创 Manacher算法实现求最长回文子串的长度

package com.zcj.alogrithm;public class Manacher { public static void main(String[] args){ String s="adsfddsfdddddff"; int maxLength=computeMaxPString(s); System.out.println(maxLen

2016-09-02 14:52:31 481

原创 KMP算法代码实现

package com.zcj.alogrithm;import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;//kmp算法//kmp算法的思想就是尽量减少重复匹配,尽可能的保存中间匹配结果//过程:对需要查找的子串进行预处理//前缀和后缀 ababd//最长匹配前缀和后缀:这里以上面d位置来讲,它的最长匹

2016-09-02 11:27:50 406

原创 Arrays.copyOf和System.arraycopy之间的区别

看vector中的源码,发现了有些部分使用的是System.arraycopy,另外一部分使用的Arrays.copyOf,就看了下,发现如果已经明确指定了目标数组和源数组的就是直接用的System的那个方法,如果没有明确指定,则是使用的后者,研究一下源码发现如下关系首先是System.arraycopy的源码public static native void arraycopy(Obje

2016-08-03 20:29:06 2194

原创 Java虚拟机相关知识整理

1.java的内存区域线程共享(1)堆:是java虚拟机所管理的内存中最大一块,用于存放对象实例,所有对象实例和数组都在堆上分配基于垃圾收集器分为新生代和老年代,并可以进一步划分为Eden,survivor,默认比例为8:1 Eden、From survivor、To survivor三个部分依据是否开启线程私有的分配缓冲区(TLAB)也存在OutOfMemoryError异常

2016-06-30 11:20:25 1203 1

原创 ssm框架学习---基于eclipse中maven的ssm框架的搭建几个问题汇总

1.构建maven的web项目后,index.jsp里面出现红叉,原因是缺少javaee的依赖解决办法:在pom.xml中加入 javax javaee-api 7.02.加入依赖之后又出现新的问题,比如提示缺少com.sun.main/javax.mail.1.5.0.jar解决办法是现在pom中添加如下 com.sun.mail javax.

2016-06-24 20:24:54 1793

原创 linux常用命令总结

1.用来查找文件的命令脚本文件名查询命令:which文件名查找查询命令:(1)whereis(2)locate前两个命令查询速度都比较快,因为是直接去查询linux中用于记录所有文件的一个数据库文件,但是存在弊端就是数据库创建默认是每天创建一次,有可能导致新创建的文件不能够及时查出来,不过可以采用updatedb命令来更新(3)findfind命令由于查询的是硬盘,所以

2016-06-24 12:10:48 286

原创 ubuntu配置jdk环境变量的问题

1,到官網去下載jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,注意下載tar.gz的,rpm是給紅帽的2.將jdk壓縮包解壓到/usr/lib/jvm目錄中,如果沒有jvm的目錄請自行創建,3.配置環境變量有三種方式(1)在當強的shell中輸入下面三句話

2016-06-23 22:04:16 377

原创 设计模式---观察者模式

观察者模式主要就是建立在观察者和被观察者之间,观察者: 抽象观察者和它的具体实现被观察者或者称之为主题:抽象主题和它的具体实现代码如下:package com.zcj.observerpattern;public interface Observer { public void update();}public class ConcreteObserver impl

2016-06-12 12:03:18 220

原创 设计模式---适配器模式

jdk中最经典的适配器模式应用便是字符流和字节流InputStreamReader,从名字可以看出前面是字节流,后面是字符流,我们生活中的比如买的港版iphone,拿到国内来充电就需要一个转接头下面写一个简单的实例:首先由一个特殊类,而我们想在另外一个一个接口的实现类中使用这个特殊类package com.zcj.adapterpattern;public class Adater

2016-06-10 16:32:34 267

空空如也

空空如也

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

TA关注的人

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