自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (4)
  • 收藏
  • 关注

原创 后端web-api参数校验

目录一.基础校验1.数字校验(1)@DecimalMax(2)@DecimalMin(3)@Max(4)@Min(5)@Digits(integer=,fraction=)2.字符串校验(1)@NotBlank3.时间校验(1)@Future(2)@Past4.集合校验(1)@NotEmpty5.布尔值校验(1)@AssertFalse(2)@AssertTrue6.其他校验(1)@NotNull(2)@Size(3)@Em

2021-09-14 11:50:34 1986

原创 docker学习

一、安装docker1、查看当前系统的内核版本必须高于3.10uname -r2、更新最新包yum update3、yum命令安装需要的软件包yum-util(提供yum-config-manager功能,才能设置yum源)和两个devicemapper驱动依赖yum install -y yum-utils device-mapper-persistent-data lvm24、设置yum源yum-config-manager --add-repo

2021-09-14 11:03:57 181

原创 git笔记

文章目录1.git版本控制2.git与svn的区别3.Git历史4.安装git及环境配置5.Linux常用命令6.git必要配置7.git原理(核心)8.git项目创建及克隆9.基本操作命令10.码云gitee注册和登录,配置SSH和创建远程仓库11.idea集成git操作12.git分支1.git版本控制什么版本控制,版本迭代,版本管理.主流版本:GitSvnCvsVssTfs2.git与svn的区别1、 SVN是集中式版本控制,版本库是集中放在中央服务器的,必须联网从服务器拷贝最新版

2021-08-04 15:08:27 166

原创 idea使用细节

一、IDEA设置1、新建类自动生成注释:/** * @description * @author: *** * @create: ${DATE} ${TIME} **/2、设置快捷键,自动生成方法注释(输入add+回车即生成以下注释)/** *<功能描述> *@param *@return **/...

2021-07-01 11:07:06 146

原创 springboot2.0学习

springboot2.0学习一、使用maven创建web项目并运行二、简化部署打成jar包一、使用maven创建web项目并运行1、网上下载并安装好maven,在settings.xml文件设置为阿里云导入依赖 <mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name

2021-06-04 15:38:15 579 2

原创 Java SE总结

java基础java高级1.大武当2.dawd

2021-04-21 09:06:39 121

原创 SpringCloud

一、与dubbo比较监控中心:cloud、dubbo注册中心:eureka、zookeeper

2021-04-21 00:52:26 85

原创 SQL笔试题

增:insert INTO student (s_id, s_name, s_birth, s_sex)values(09, 1, 1, 1)删:deleteFROMstudentWHEREs_id = 09改:update studentSET s_name = “李海”WHEREs_id = 011、查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号。(join联结自身两张表,条件:学生id相等,课程分数比较,课程号为01和02)要点:联结SEL...

2021-04-20 22:44:44 255

原创 排序算法(动图解析)

一、冒泡排序:每次左右比对二、选择排序:每次找最小放一边三、插入排序:未排序的插入已排序四、归并排序:假如有8个数。先分成2份,对1份前2个数排序、前4个数排序;再对第2份前2个数排序、前4个数排序五、快速排序:从开始选择一个数作为基数,遍历后面的数,大于基数的放左边,小于基数的数和大于基数的数交换。这样就会得到基数的右边小,左边大。再把基数放至他们中间。重复即可!六、堆排序:类似二叉树,左小右大,把所有数挂到树上,再一一进行比较排序...

2021-04-12 17:24:24 111

原创 面试总结

一、八种Java基本类型字符类型:char布尔类型:boolean整数类型:byte、short、int、long浮点数类型:float、doublechar:16位,2字节,存储Unicode码,用单引号赋值。boolean:1位,1/8字节(可为1、4字节,根据不同环境不同取值)只有true和false两个取值。byte:8位,1字节,最大存储数据量是255,存放的数据范围是-128~127之间。short:16位,2字节,最大数据存储量是65536,数据范围是-32768~32767之

2021-03-25 01:45:11 143

原创 JavaSE基础-面试提问

1.1重载与重写(了解)重载:发生在同一个类,方法名必须相同,发生在编译时。重写:发生在父子类中,方法名、参数列表必须相同。如果父类被private修饰,则子类不能重写该方法。1.2String、StringBuffer、StringBuilder(必会)String:String类中使用final关键字字符数组保存字符串,所以String对象不可变StringBuffer、StringBuilder:没有final关键字修饰,所以这两种对象可变操作少量数据用String(对象不可变,理解为常量

2021-03-17 00:57:30 168

原创 mysql数据库的规范和性能之间的取舍

一、规范性1、第一范式1NF(属性的原子性)如:学生表:学号、姓名、性别、出生年月日用户表:id、姓名、性别、地址如果认为最后一列出生年月日还可以再分成(年,月,日),它就不是一范式了;如果认为最后一列地址还可以再分成(省,市,县),它就不是一范式了。2、第二范式2NF(字段依赖主键的关系)表:学号、课程号、姓名、学分这个表明显写了两个事务:学生信息和课程信息正确做法:学生:Student(学号, 姓名);课程:Course(课程号, 学分);选课关系:StudentCourse(

2021-02-20 16:11:34 219 1

原创 创建spring mvc项目挂载到Tomcat并成功启动(注意各项配置)

1、利用maven创建spring mvc项目2、maven设置为本地3、创建web模块,注意这里都默认设置,先不要更改,否则会报找不到页面4、创建人工制品artifact5、添加进Tomcat

2021-02-02 21:58:59 327

原创 随手笔记

QPS没啥技术含量。提升tps的解决方案才考验功底Tps尽量所有东西不要同步执行数据库并发数并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力吞吐量吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标响应时间RT(Response-time)响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间QPS(Quer

2021-01-14 20:46:28 116

原创 购物车前后端html内嵌页交互的异步操作并且计算总价格

一、现在每个电商网站的购物车的操作,你会发现网速变慢了,是它故意让服务变慢,减速带,避免大量的高并发把服务器打崩。1、这里使用ajax异步操作2、异步操作一般都是返回json,这里做的是,返回内嵌页面,刷新当前页面3、把购物车列表的内嵌页面放到一个新的html页面中,服务器只需要返回并刷新这个内嵌页面即可!4、每次点击按钮,都会调用该事件checkSku(this),该事件在主页面上二、实现前后端交互的异步操作(导师留下的前端bug,作为后端的开发人员表示看的很头痛!!!)执行该事件(

2020-12-22 15:36:53 951 1

原创 购物车的redis数据结构使用hashmap效率会更高(1、同步缓存 2、查询缓存)

一、回忆一下该项目之前所使用的数据结构1、 有用到redis缓存技术的是访问商品的详情页面前先访问redis(kv结构)。2、 有用到hashMap结构的是商品的详情页面制作spu下其他sku商品为哈希表(hash结构)。二、这里购物车的缓存使用hashmap数据结构1、 存储的是购物车集合2、 键:用户id3、 购物车里的某个sku商品的更新4、 使用哪个数据结构较好?kv和hashmap×如果使用kv结构,取出json,转换为集合,集合再遍历出对象,修改对象,再放回集合,转为json

2020-12-22 15:18:04 1601

原创 cookie技术的实现

一、购物车的cookie技术,有四条分支的操作,如下图:二、 标题cookie和session的区别(Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。):Cookie:给客户端们颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。Session:就是通过检查服务器上的“客户明细表”来确认客户身份,Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。三、这里要

2020-12-22 14:43:16 530 1

原创 创建购物车模块及业务逻辑

一、创建购物车前后端模块二、Web前端的properties文件:#端口号server.port=8085#日志级别logging.level.root=info#dubbo协议#dubbo中的服务名称spring.dubbo.application=cart-web#protocol协议的意思,即dubbo通讯协议spring.dubbo.protocol.name=dubbo#zookeeper注册中心地址,registry注册的意思spring.dubbo.reg

2020-12-22 14:12:05 736

原创 面包屑功能的实现,在上篇文章得到了去重的属性值。现使用迭代器iterator游标指向商品的属性值,并与用户点击的属性值对比,如相同,则去除该行的属性,让用户点击的属性值成为面包屑

一、京东和淘宝都一样,每一个搜索都是一次独立的get请求,都是一个独立的URL请求:既不用post请求,也不用异步,为什么这样做?1、方便分享好友。2、get请求是同步请求,可以大幅度为服务器争取缓冲时间,减少服务器压力。异步恰恰相反!!!二、理解URL请求、面包屑、属性值列表中的每一个get请求:(1)当前请求url中所包含的属性=面包屑中所包含的属性(2)在面包屑请求中的属性值,在属性列表都被剔除了当我点击15.0英寸-15.9英寸,属性列表就变成这样了:由此可以得出结论:当点

2020-12-19 22:50:19 415 1

原创 用户搜索es某些商品,该商品的属性和属性值很多相同的,使用数据结构的set集把它们全部去重,再去查询数据库,最后显示没重复的属性值!

一、显示这些平台属性值列表,是根据用户搜索的内容提取出来(剔除不符合的其他属性值),不全部显示平台属性值。比如符合16G属性值的产品,用户点击16G,就把16G的产品中没有的属性值剔除。(1)可以使用es的aggregation聚合函数抽取平台属性这个效率比较低,因为它不同于mysql,它这个聚合结果的过程损耗太多时间了。es查询的效率虽然很高,但查询到的数据,使用聚合函数,还要统计每个商品拥有多少相同的属性值id,等待统计结果,再把它返回给你,性能较低!// es的聚合函数aggsTerm

2020-12-19 21:50:24 551 1

原创 面试题

一、dns域名解析服务器:比如你要浏览baidu.com这个网站,你在浏览器输入这个域名,dns服务器就会把该域名解析成对应的ip地址,并且定位到该ip地址。服务商自动帮你完成!类似Windows中C:\Windows\System32\drivers\etc的host文件二、http和https的区别:(1)私钥和公钥是成对的,它们互相解密:1、公钥加密,私钥解密:我把一个文件发送到网上,使用我的公钥进行加密,别人偷看不了,因为只有我的私钥才可以解密,仅本人查看。2、私钥加密,公钥解密(多用

2020-12-19 20:22:36 172

原创 完成搜索模块功能,引入搜索页面。接收并封装用户的搜索关键字、三级分类id、属性值列表,对es执行查询操作,并设置高亮!

引入index首页和list商品列表,两个页面。并且要对这些页面进行路径的修改,有点小bug1、三级分类静态资源文件的加载路径修改路径2、修改list.gamll.com修改search.gmall.com:80833、三级分类的加载文件的js,请求url改为search.gmall.com:80834、页面引入之后,写controller调用一下,看是否成功?@Controllerpublic class SearchController { @RequestMapping

2020-12-19 02:14:11 774 1

原创 es的复杂查询测试,使用jest的dsl工具写查询语句

1、查询有两种方案:(1)先过滤条件,再搜索关键字(2)先搜索关键字,再过滤条件采用先过滤条件,再搜索关键字,这样查询效率更高!!!2、这样的查询也是交集查询,把查询范围缩小,才能更加符合用户需查询的商品。query{ bool #联合查询 filter #过滤条件 term #过滤某一列的id must #关键字查询 match #搜索某一列数据的关键字}3、举例,执行下面的es复杂查询(过滤条件+关键字查询)(filter过

2020-12-19 01:36:11 824 1

原创 查询mysql数据库,转化为es数据结构,再利用jest客户端使用dsl语句拼接成字符串,一条一条数据地传递给es服务端,最终以json格式存储

1、选择es的客户端,目前市面上有两种客户端一类是transportClient为代表的es原生客户端,不能执行原生的dsl语句,必须使用它的java api方法另一种是rest api为主的missing client,最典型的就是jest。这种客户端可以直接使用dsl语句拼成的字符串,直接传给服务端,然后返回json字符串再解析。2、在gmall-search-service模块引入es的java客户端jest依赖<!--es的java客户端,天然整合es,不需要再写工具类。直接在prop

2020-12-19 00:53:14 697 1

原创 es通过mapping定义数据类型

前面已经说了,es都是文本的形式存储数据,直接创建索引,和type表,字段中插入数据。不需要定义这些数据是什么类型的,可以不定义。但如果要定义,那么我们就可以使用mapping来定义数据结构类型1、Es的mapping定义是基于整个库的Mysql数据结构字段定义是基于整个表的2、Es由mapping定义默认字段数据类型Text:可拆分的字符串(分词)Keyword:不可拆分字符串3、决战618这本书在吹牛,吹京东自己的,自己的sku商品(以前+现售)超10亿个4、es搜索这些sku,也相当于

2020-12-19 00:18:20 2058 5

原创 搜索模块功能分析

1、搜索功能模块步骤:(1)数据结构的准备(2)项目的初始化(3)es客户端的整合(4)谷粒搜索代码的开发搜索功能和面包屑功能2、分析数据结构:(1)商品名称(展示/查询)(2)商品价格(展示/查询)(3)商品图片(展示)(4)平台属性和属性值的列表(查询)(5)商品描述(展示/查询)(6)热度值(查询,指搜索热度较高的商品,暂时不用)(7)三级分类id(查询)(8)系列商品productId(隐藏)(9)具体商品skuId主键(隐藏)3、参数结构:关键字((1)商品名称

2020-12-18 02:43:49 1413

原创 es集群工作原理

一、es集群简介当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据(同步)二、集群节点1、集群中一个节点会被选举为主节点(master)2、主节点不参与文档级别的变更或搜索3、任何节点都可以成为主节点。4、用户,我们能够与集群中的任何节点通信,包括主节点。5、每一个节点都知道文档存在于哪个节点上,它们可以转发请求到相应的节点上。6、我们访问的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由Elasticsearch处理。三、集群健康在Elasticsearch集群中

2020-12-18 02:39:27 3431

原创 es的集群管理工具cerebro的使用

1、es既然这么好用,但是它浪费的空间特别大,如果以后数据越来越多,那么是不是就要扩展es机器搭建更大的集群呢?存储和es服务,这是两个概念,不要混淆了,数据量大,你可以去添加存储,比如大公司的项目,都有外接存储机器。和es服务不一样,es它只是提供服务,和你本身的数据量,存储机器不一样的!两者不要混淆了。2、可以使用集群管理工具cerebro-0.8.3查看我们的es集群。直接解压,解压就可以用了,到bin目录下,运行以下bat文件3、浏览器输入http://localhost:9000即可打开

2020-12-18 02:24:31 1916

原创 搭建es集群,对外提供服务端口,对集群内提供服务端口,设置主节点为节点的半数+1防止脑裂

一、克隆一台Linux机器,右键Linux系统,管理-克隆1、2、3、4、打开克隆的机器,修改他的ip地址cd /etc/sysconfig/network-scripts/vi ifcfg-ens33 5、重启网络服务service network restart二、es的集群配置文件(冒号:后一定要加空格。等号=后一定不加空格)vi config中的elasticsearch.yml文件cluster.name: aubin-cluster # 集群名称(不能重复)

2020-12-18 00:52:51 1090

原创 es的相关性算分-BM25算法:词频超过一定数量,超过的那部分不进行算分

相关性算分:指文档与查询语句间的相关度,通过倒排索引可以获取与查询语句相匹配的文档列表如何将最符合用户查询需求的文档放到前列呢?本质问题是一个排序的问题,排序的依据是相关性算分,确定倒排索引哪个文档排在前面影响相关度算分的参数:1、TF(Term Frequency):词频,即单词在文档中出现的次数,词频越高,相关度越高2、Document Frequency(DF):文档词频,即单词出现的文档数3、IDF(Inverse Document Frequency):逆向文档词频,与文档词频相反,.

2020-12-18 00:38:30 1647

原创 es的query关键字中的match子关键字匹配查询,中文分词器(ik_smart 简易分词、ik_max_word 尽最大可能分词)

1、先了解一下es的语法语句关键字2、最常用的,query关键字查询,query下还有match子关键字(匹配的意思)GET movie_index/movie/_search{ "query": { "match": { "name": "red" } }}查询name字段带有red的,查到总共2条结果!3、上面插入和查询的都是英文,那么要让es识别我们的中文,怎么办?就是要让他做到分词处理,比如:红海行动,要让他分成:红海、行动才行的。这里可以让他先分析一

2020-12-18 00:32:26 2545

原创 es增PUT 删DELETE 改POST 查GET操作

1、增PUT 删DELETE 改POST 查GET:2、插入数据:格式 PUT /index/type/idindex相当于库,type相当于表,id相当于主键PUT /movie_index/movie/1{ "id":1, "name":"operation red sea", "doubanScore":8.5, "actorList":[ {"id":1,"name":"zhang yi"},{"id":2,"name":"hai qing"},{"id":3,

2020-12-17 23:48:30 1759

原创 es的kibana工具基本操作

1、开发工具(kibana):链接: https://pan.baidu.com/s/18Z0liszLQII5_f-KWYQNzQ 提取码: y3kf解压它:tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz2、配置kibana的es的信息(修改kibana.yml文件信息)server.host: "0.0.0.0"elasticsearch.url: "http://172.25.0.11:9200"连接elasticsearch的ip地址和端口3

2020-12-17 23:10:04 360

原创 es的交互

1、mysql是通过tcp协议进行的交互2、而es比较高级,使用的是http协议进行交互,为什么呢,因为es存的都是一些文本的内容,以json字符串格式进行的交互,使用http会比较方便。以http端口9200为它的交换手段。如果该端口未开放,则需要输入以下命令开放:firewall-cmd --permanent --add-port=5601/tcpfirewall-cmd --reload 3、get请求:请求指定的页面信息,并返回实体主体。即:输入一个指定网址,返回该主体网址put

2020-12-17 22:59:17 466

原创 安装elasticSearch

1、安装环境:CenOs7、内存2G、java1.82、elasticSearch是基于Lucene的,用java写的,有什么好处?只要有jvm虚拟机在,解压就直接可以跑了,反而之前的fastdfs用c写的复杂更多。3、现在/opt目录下,创建一个mkdir es目录,上传到linux系统的/opt/es目录下:4、cd /opt/es5、给予所有压缩包权限chmod 777 *6、tar -zxvf elasticsearch-6.3.1.tar.gz解压文件。并且chmod 777 -R

2020-12-14 14:46:06 85

原创 搜索引擎 elasticSearch

1、搜索引擎elasticSearch5.0:使用root用户权限,一个数据库可以建立多张表elasticSearch6.0:只能使用elasticSearch其他用户权限,一个数据库只能建立一张表为何6.0更新了,反而权限降低了呢?在5.0版本中,是因为你用了root使用elasticSearch,有很多黑客可以透过elasticSearch获得root权限,操作的服务器,这样就非常不安全。姑且6.0版本就限制了用户的使用权限了。2、文本搜索引擎(以空间换时间的算法)在MySQL数据库中(除开主

2020-12-14 14:23:47 164

原创 使用阿帕奇进行高并发压力测试

1、下载地址:https://www.apachehaus.com/cgi-bin/download.plx直接下载和解压。2、修改apache服务的配置文件(服务器的根目录)安装在哪了,就修改哪个根部目录。3、启动服务去到apache的bin目录运行cmd,输入命令:httpd.exe启动服务。如果有端口被占用输入命令查看:netstat -ano | findstr “443”,并杀掉该进程这里因为nginx用的是80端口,所以为了防止冲突,把httpd.conf文件的端口80改为

2020-12-14 13:43:47 540

原创 采用Redisson框架在Java层面解决缓存击穿问题

redisson在redis基础之上,用来控制redis一系列的工具的集合,这些工具是在java的接口实现的。比如说juc、MQ、消息队列(一系列工具的集合)要实现分布式锁,可以在redis服务器实现,也可以在java项目的工具类上实现。1、Redisson实现了juc的lock锁,并且可以在分布式的redis环境下使用juc的可重锁上篇文章:redis自带的分布式锁,是jvm的一条或者多条线程。这里redisson框架使用的juc的锁是指分布式环境下的一个或多个redis操作连接。@Auto

2020-12-14 13:27:34 379

原创 分布式锁解决因为删锁而产生的两种问题

设置锁过期时间,访问数据库后删除锁。涉及的两种问题都是毫秒级别的问题,为了减轻服务器的压力,一般在大厂里要完善的代码。而小公司里,则不需要这么麻烦,不设计删除锁,直接等待过期时间过去自动删除锁。这样就省去了因为删除锁产生的一系列问题。分布式锁的两种问题:第一种问题:锁过期,删除锁,把别人的删了第1条线程拿锁进去访问数据库,突然该线程发生了意外,等待时间较长,直到过期时间到了(锁释放,第2条线程拿锁进入访问)!突然:第1条线程复活,访问数据库出来,删除锁(此时把第2条线程的锁给删除了)请设计方案解决

2020-12-14 13:11:42 1122

原创 测试redis分布式锁

1、基础知识:通过HttpServletRequest获取对方请求的IP地址request.getRemoteAddr()直接请求到服务器,获取对方的IP地址request.getHeader("")通过nginx负载均衡访问的服务器,获取对方的IP地址。@RequestMapping("{skuId}.html")public String item(@PathVariable String skuId, ModelMap modelMap, HttpServletRequest reques

2020-12-14 11:50:51 426

apvl-manage.rar

审批模块

2021-05-11

study-boot.rar

学习springboot基础入门

2021-05-11

传染病直报系统(毕设).zip

传染病直报系统(毕设).zip

2021-04-13

谷粒商场源码(订单模块).zip

谷粒商场源码(订单模块).zip

2021-04-13

空空如也

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

TA关注的人

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