- 博客(36)
- 收藏
- 关注
原创 SpringCloud服务拆分和调用
三、微服务消费者和提供者编写启动类,添加@EnableEurekaServer注解}添加application.yml文件,编写下面的配置:六、服务注册首选引入依赖然后配置yml文件
2022-06-09 22:37:22
492
原创 Redis:用户签到和UV统计
一、用户签到:BitMap功能代表某个用户某一天的签到记录;如果有1000万用户,平均没人每年签到10次,一年则为1亿条;数据庞大;也耗内存;二、用户签到:实现签到功能/** * 用户签到功能 * @return */ @Override public Result sign() { // 获取用户当前 UserDTO user = UserHolder.getUser(); Long userId
2022-05-04 22:51:02
739
原创 Redis:达人探店
一、点赞功能的实现private void queryIsLike(Blog blog){ Long userId = UserHolder.getUser().getId(); // key String key = RedisConstants.BLOG_LIKED_KEY + blog.getId(); Boolean isMember = stringRedisTemplate.opsForSet().isMember(key, u
2022-05-02 21:25:04
987
1
原创 Redis:优化秒杀
一、Redis优化秒杀:异步秒杀原先的步骤:1、查询优惠券2、判断秒杀库存;3、查询订单;4、校验一人一单;5、减库存、创建订单;这些 涉及到大量数据库的操作,所以在高并发 的情况下,性能并不是很好;解决方案:通过redis,先将优惠券库存信息和订单信息存入redis,用lua脚本执行,保证原子性;将用户id用set集合存到redis中,对于同一张优惠券,如果userId存在,用户不能重复下单,以此判断用户是否有资格购买,然后异步开启独立线程执行,创建订单,放入阻塞队列,线程读取队列中的
2022-04-04 15:01:33
1293
原创 Redis:黑马点评之分布式锁
一、分布式锁基本原理和不同实现方式对比多个JVM共享同一个锁监视器;多进程可见,并且互斥;分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁;不同的分布式锁实现方案:二、Redis锁的实现思路获取锁:通过setNx命令释放锁:DEL key 命令-----手动释放,或者超时释放,给锁添加一个超时时间;(超时时间的设置需要考量,不能太长,避免类似死锁现象的发生)...
2022-04-03 14:43:32
1922
原创 Redid:黑马点评项目之优惠券秒杀
一、优惠券秒杀:全局唯一ID每个店铺都可以发布优惠券;当用户抢购,就会生成订单并保存在tb_voucher_order这张表中,订单表如果使用数据库自增id会让1、id的规律性太明显;2、受单表数据量的限制;全局id生成器:全局唯一id。利用redis的incre自增属性为了增加redis的安全性,也可以不直接使用redis自增的数值,而是拼接一下其他信息 public long generateOnlyId(String prefix){ // 1.生成
2022-03-28 23:10:39
1240
原创 Redis:黑马点评项目之商品缓存
一、缓存更新策略缓存可以减轻数据库压力,但也会存在数据库与缓存不一致的问题;如果数据库数据更新,缓存没有更新,那查到的就是缓存中的旧数据;内存淘汰:不用自己维护,利用redis内存淘汰机制,当内存不足时淘汰部分数据,下次查询时更新缓存;在一定程度上可以保证一致性;但是这种一致性不是我们能控制的,淘汰哪一部分数据,什么时候淘汰,不确定;好处是没有维护成本;超时剔除:给缓存数据添加过期时间TTL,到期自动删除缓存,下次查询更新缓存;这个一致性的强度取决于时间长短;一致性一般,维护成本也低;主动更
2022-03-27 14:58:00
2248
原创 Redis:黑马点评项目之用户短信登录
一、表结构建表sql语句:/* Navicat Premium Data Transfer Source Server : local Source Server Type : MySQL Source Server Version : 50622 Source Host : localhost:3306 Source Schema : hmdp Target Server Type : MySQL Target Se
2022-03-23 22:37:13
20147
原创 Redis数据结构
一、Redis数据结构介绍二、redis命令官网文档:redis命令官方文档# redis常用命令# 查所有数据KEYS * # 查询以XX开头的数据KEYS a*# 删除指定的keyDEL k1 k2 k3# 批量创建数据MSET k1 va k2 v2 k3 v3# 判断一个key是否存在EXISTS# 给一个key设置有效期,有效期到期是该key会被自动删除EXPIRE# 查看一个key的剩余有效期TTL三、String 类型字符串类型:1、Strin
2022-03-19 15:59:59
1404
原创 Redis:安装和介绍
一、Redis概述安装redis是一个开源的key-value储存系统;redis的五种存储类型:String字符串、list链表、set集合、zset有序集合、hash哈希类型;数据都是缓存在内存中。redis会周期性的把更新的 数据写入磁盘,或者把修改操作写入追加的记录文件。二、redis用于什么样的场景?配合关系型数据库(mysql)做高速缓存。高频词、热门数据的访问,降低数据库的io;分布式架构,可以做session 共享;通过list集合按照自然的时间排序的数据,最新的N个数据
2022-03-18 23:06:34
665
原创 Js学习一
一、JS的数据类型和变量- 5种数据类型:String 字符型;number 基本数据类型(short、int、long)boolean 布尔型funtion 函数object 对象- 3种特殊的值:undefind:未定义,所有js里未赋予初始值的时候。默认为undefindnull :空值NAN : not a number ,不是数字,也不是数值;string 类型 * 数值类型 不会报错,但是输出会是NAN- 关系运算== :等于是简单字面值的比较===:全
2022-03-07 23:23:04
87
原创 Java8新特性
一、java8新特性内容概述Lambda表达式;方法引用、构造器引用;stream流:并行流、串行流;接口的增强:静态方法、动态方法;Optional类;新的时间的日期API其他:重复注解、类型注解、通用目标类型判断;速度更快代码更少:增加了新的语法,lambda表达式stream流便于并行最大化减少空指针异常:OptinalNashorn引擎,允许在jvm上运行js应用二、Lambda表达式写法:6种public class Lambda { @Tes
2022-03-02 23:03:55
220
原创 Mybatis-plus一:MybatisPlus概述
一、Mybatis-Plus概述Mybatis-plus官方文档:乐观锁当要更新一条记录的时候,希望这条记录没有被别人更新乐观锁实现方式:取出记录时,获取当前version更新时,带上这个version执行更新时, set version = newVersion where version = oldVersion如果version不对,就更新失败乐观锁:1、先查询,获得版本号 version = 1-A线程:update user set name = “111”,versi
2022-02-12 19:53:01
305
原创 畅购商城项目day8:微服务网关
一、微服务网关1、微服务网关的作用:1、整合各个微服务的功能,形成一套系统;(主要作用——路由)2、微服务网关中实现日志统一记录;3、用户登录权限认证;4、限流;5、实现用户的跟踪操作2、为什么要用微服务网关?首先页面对接很多个域名(微服务),非常繁琐;安全隐患,服务端暴露过多的接口,容易受到攻击;GateWay安全,提供了统一访问的入口,降低了服务器受攻击面积;跨域问题(浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域);Gateway提
2022-02-12 19:51:58
688
原创 畅购商城项目day9: 用户认证
一、用户认证思想1、单点登录+第三方授权登录:SpringSecurity Oauth2.0实现2、SpringSecurity Oauth2.0认证模式有两种:授权码授权模式密码授权模式3、单点登录的实现方式:Apache ShiroCASSpring security CAS4、1:认证与授权身份认证:登录,校验用户密码、账号是否匹配,身份合法可继续访问。常见的身份认证表现形式有:用户名密码登录、指纹打卡等。用户授权:身份认证之后,系统会判断用户是否有访问系统资源的权限,就是鉴别
2022-02-12 19:51:43
411
原创 面试考点乱序合集一:对守护线程的理解?
一、谈谈什么是守护线程?守护线程:为所有的非守护线程提供服务的线程;任何一个守护线程都是整个JVM中所有非守护线程的保姆;守护线程依赖于整个进程而运行,哪天其他线程结束了,没有要执行的了,程序就结束了,不会理会守护线程,直接中断他;守护线程是不靠谱的,它本身的终止自己都无法控制,所以不要把io、File等重要的操作逻辑分配给它;二、守护线程的作用?举例:垃圾回收线程(GC),守护线程。当我们的线程中不再有任何线程,程序就不会再产生垃圾、垃圾回收线程无事可做,当JVM上只有GC时,就会自动离开。
2022-02-12 19:51:32
290
原创 Spring三:javaConfig方式的配置、AOP
一、javaConfig方式的配置1、舍弃了原来的spring.xml配置文件,用纯注解的方式实现。2、简单步骤://加这个注解,就是让这个类加载到容器中@Componentpublic class User { private String name; public String getName() { return name; } @Value("张三") public void setName(String name) {
2022-02-12 19:50:59
1035
原创 Spring二:Spring配置说明、依赖注入、bean的作用域、Spring的自动装配
一、Spring官方文档IOC介绍:https://www.docs4dev.com/docs/zh/spring-framework/4.3.21.RELEASE/reference/beans.html#beans-introduction二、Spring的初步使用 private String str; public Hello() { } public Hello(String str) { this.str = str; }
2021-02-22 19:14:53
149
原创 Spring一:Spring简介、Spring组成和拓展、IOC理论推导、IOC本质、Spring初步使用
一、Spring简介1、Spring理念:使现有的技术更加实用,本身是一个大杂烩。目的是整合现有的框架技术。官网 : http://spring.io/官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/GitHub : https://github.com/spring-projects2、Spring的优点:免费的框架(容器);轻量级、非入侵式;核心是:控制反转(IOC)、AOP(
2021-02-22 00:40:09
238
3
原创 Mybatis五:缓存、缓存的原理、自定义缓存
一、什么是缓存【Cache】查询:需要连接数据库,非常耗资源。一次查询的结果,可以存在一个直接取到的地方,内存。这个时候,这些临时放在内存里面的数据,叫缓存。我们再次查询相同数据的时候,直接走缓存,就不用走数据库。从而提高查询效率,解决高并发系统的性能问题。为什么使用缓存?减少用户和数据库交互次数、减少系统开销、提高系统效率。什么样的数据能用缓存? 经常查询并且不经常被改变的数据。二、Mybatis缓存mybatis中默认定义了两级缓存,一级缓存和二级缓存;一级缓存:又叫本地缓存。默认情
2021-02-20 15:06:44
184
1
原创 Mybatis四:动态sql
一、动态sql1、什么是动态sql:根据不同的条件生成不同的sql语句;2、if语句:这条语句提供了可选的查找文本功能; <select id="findBlogByMap" parameterType="map" resultType="blog"> select * from blog where 1=1 <if test="title != null and title != ''"> and title
2021-02-20 10:44:04
97
原创 Mybatis二:生命周期和作用域、ResultMap结果集映射、日志、分页
一、生命周期和作用域1、生命周期和作用域很重要,因为错误的使用会导致并发问题;2、SqlsessionFactoryBuilder:目的就是为了生成SqlsessionFactory,一旦SqlsessionFactory创建,就不需要它;局部变量;3、SqlsessionFactory:可以当做数据库连接池;一旦被创建就一直在应用的运行期存在,没有任何理由丢弃或者重新创建另一个实例;(因为多次重建,会导致资源的浪费,在高并发情况下会引起系统崩坏);最简单的就是使用单例模式或者静态单例模式;
2021-02-18 21:47:31
148
1
原创 Mybatis一:什么是mybais?mybatis编写步骤、属性配置优化
一、什么是Mybatis?Mybatis是一款优秀的的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis几乎避免了所有的jdbc代码和手动设置参数以及获取结果集。Mybatis可以使用简单的xml或者注解来配置和映射原生类型、接口和java的pojo为数据库中的记录。二、写mybatis的步骤思路:搭建环境-----》导入mybatis------>编写代码------》测试1、创建一个普通的maven项目;2、在父工程的pom文件中引入基本的依赖;<depende
2021-02-18 13:27:03
318
1
原创 JAVA注解和反射
一、注解(Annotation)1、jdk5.0开始用的新技术;2、注解的作用:可以被其他程序读取,格式为@注释名3、注解在哪里使用:可以附加在package、class、method、field上面,相当于给他们添加了额外的辅助信息;二、内置注解@Override:定义在java.lang.Override中,此注解只适用于修辞方法,表明一个方法声明要重写超类里面的另一个方法声明;@Deprecated:定义在java.lang.Deprecated中,此注解可以用于修辞方法、属性、类
2021-02-09 16:42:09
107
原创 Java常用的类:Object类、Math类、Random、File、包装类、Date、String、StringBuffer、StringBuilder
一、Object类1、是一个特殊的类,是所有类的父类;2、重点方法:toString():返回对象的类型+内存中的地址;一般对象类中要重写Object类中的toString方法,以便返回字符串形式的数据;equals(): 比较两个对象的内存地址是否相等;相等返回true,不相等返回false;重点--------》》》》“双等于号==”和equles()的区别:“双等于号==” 是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地
2021-02-09 01:04:32
853
原创 面向对象二:抽象类与接口
一、抽象类1、abstract:可以用来修饰方法,也可以修饰类;如果修饰方法,那么该方法就是抽象方法,修饰类,该方法就是抽象类;2、抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类;3、抽象类:都是欠债的,不能new,它是用来让子类继承的;4、抽象方法:只有方法的声明,没有方法的实现,它是用来让子类实现的;5、子类继承抽象类必须实现抽象父类中,没有实现的抽象方法,否则该子类也要声明;6、java的类单继承,没有多继承;但是接口可以多继承;二、接口1、普通类:只有具体实现;2、
2021-02-07 14:17:08
52
原创 面向对象一:什么是面向对象?类与对象创建、构造器、内部类
一、面向过程与面向对象1、面向过程:强调步骤、过程,第一步、第二步分别做什么;2、面向对象:先分类,赋予这个类某些属性和方法,再实现方法;本质就是以类的方式组织代码,以对象的形式封装数据;3、面向对象的特性:(***)抽象:找出事物的相似和共性之处,然后将这些事物归为一个类;这个类只考虑这些事物的相似和共性,忽略与当前主题和目标无关的方面; 比如:猫、狗、猪,可以抽象成动物类;封装(数据的隐藏):将对象封装成一个高度自治的相对封闭的个体,private 数据类型 属性名(属性私有,get/set
2021-02-06 21:49:21
178
原创 Arrays类、冒泡排序、选择排序、插入排序、稀疏数组!
一、Arrays类1、数组的工具类:java.util.Arrays;2、Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用(注意:是“不用”,不是“不能”)3、常用功能:给数组赋值:通过fill方法;对数组排序:sort方法,按升序;比较数组:通过equals方法比较数组中元素值是否相等;查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找发操作;public static void main(Stri
2021-02-05 21:02:29
153
原创 java基础:数组
一、数组概述1、数组是相同类型数据的有序集合;2、每一个数据集称作一个数组元素,每个数组元素可以通过下标访问它们;二、数组的声明和创建1、 int [] nums;//定义,此种方式首选 int nums []; //这是c++语言风格的 nums = new int[10];//可以存放10个类型的数字数组下标是从0开始的获取数组长度:arrays.length 的属性;2、三种初始化1.静态初始化: int [] a =
2021-02-05 10:01:08
66
原创 Java方法:什么是方法?方法的调用、重载,命令行传递参数、可变参数、递归函数!
一、什么是方法?1、Java方法是语句的集合,他们在一起执行一个功能。方法是解决一类问题的步骤的有序组合;方法包含于类或对象中;方法在程序中被创建,在其他地方被引用2、设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,利于后期扩展3、方法的组成:修饰符:这是可选的,告诉编译器如何调用该方法,定义了该方法的访问类型;如public static,即为修饰符;返回值类型(Return Value T
2021-02-04 18:35:41
349
原创 JAVA流程控制:break、coutinue使用,打印各种图形
一、break、continue的区别1、break:强行退出循环,不执行循环中剩余的语句;只是跳出循环,循环之后的语句还会执行;2、continue:终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下次是否执行循环的判定;碰到符合的条件,会让程序回到开始循环的地方,后面的部分不执行了;3、goto关键字:goto是java的一个保留字,并未在语言中正式使用;java没有goto。 但是,在break和continue这两个关键字身上,仍然可以看到goto的影子——带标签的break和c
2021-02-04 10:40:35
233
原创 JAVA流程控制:用户交互Scanner对象、顺序结构、if选择结构、Switch选择结构、While循环结构、DoWhile循环、For循环、九九乘法表打印、增强for循环!!!
一、Scanner对象1、java.util.Scanner是Java5的新特征,我们可以通过Scanner类获取用户的输入;2、基本语法:Scanner s = new Scanner(System.in);3、案例:next()方法与nextLine()区别;next()一定要读取到有效字符后才可以结束输入;(必须输入,否则不停止)对输入的的有效字符之前遇到的空白,next()方法会自动去掉空白;只有输入有效字符后才能将其后面输入的空白作为分割符或者结束符;**next()不能得到带有
2021-02-03 21:05:53
197
原创 Java中变量、常量、作用域、运算符、包机制
一、变量1、变量:可以变化的量;2、Java是一种强类型语言,每个变量都必须声明其类型;3、Java变量是程序中最基本的存储单元,要素包括变量名、变量类型和作用域;4、变量作用域:类变量:static int a = 0;写在方法的外面,类的里面,加了static关键字;实例变量:写在方法的外面,类的里面,从属于对象;如果不进行初始化,这个类型为默认值;String str = "sssss";局部变量:写在方法里面,必须声明和初始化值 public void method(){
2021-02-03 10:54:26
100
原创 Java程序运行机制、Java基础语法、Java类型转换
一、编译型Complie(编译):通过编译器把整个文件直接编译,将java源码转换成计算机可以执行的代码;二、解释型实时翻译:写一句,编译一句;三、程序运行机制四、JAVA基础语法1、注释:注释不会被执行,写给人,让人看懂单行注释://多行注释://////文档注释:JavaDoc文档注释 /** */平时写代码多写注释2、关键字和标识符:java所有组成部分都需要名字。类名、变量名以及方法名都被称为标识符。关键字——————————》》》》》》》不能用关键字起名字
2021-02-02 21:03:49
118
原创 第一篇博客:计算机的组成与诞生
记第一篇博客计算机1、Computer:能够按照程序运行,自动、高速处理海量数据的现代智能电子设备。2、由硬件和软件组成,但是计算机运行不一定需要操作系统。#计算机硬件CPU、内存(Memory)、主板(Motherboard)、显卡、IO设备等等;#冯诺依曼体系结构:#计算机软件:1、是计算机按照事先预定好的顺序完成特定的功能;2、按照功能分为:系统软件和应用软件;3、系统软件:DOS、Windows、Linux、Max、Android、IOS;4、应用软件:WPS、qq、微信;
2021-02-02 10:44:29
127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人