- 博客(44)
- 资源 (1)
- 收藏
- 关注
原创 RocketMQ(No route info of this topic+connect to <172.22.235.159:10911> failed)
No route info of this topic+connect to <172.22.235.159:10911> failed主要就是以上两个问题,这两个问题看了很多博客都没解决,终于找到了办法,搞了我好久;正常的步骤1、启动NameServer服务器nohup sh bin/mqnamesrv &tail -f ~/logs/rocketmqlogs/namesrv.log2、启动brokernohup sh bin/mqbroker -n localhost:
2022-02-17 15:48:39
1175
2
原创 Cookie-SameSite属性详解(CSRF攻击、同站和跨站;跨子域)
Cookie-SameSite属性一、CSRF攻击二、同站和跨站三、Samesite存在的作用四、Samesite三个属性五、测试一、CSRF攻击我们知道cookie作为标识用户身份的存在,可以帮助我们不需要输入账号密码进行登录就可以完成认证执行某些操作;假设我们在访问第三方网站时,网站页面存在一条ajax请求是Post请求地址为:执行银行账户的转账操作,由于你的浏览器内包含cookie,那么这条请求就会携带cookie然后请求就会被执行;二、同站和跨站这边对于同站的理解非常重要:Cookie中的
2022-01-25 11:09:24
1989
原创 前后端分离+nginx实现动静分离搭建https图解
一、前后端不分离:项目运行在同一个域名以及端口下,通过controller调转到springboot中resources的static下的页面从而实现交互;二、前后端分离:前端页面发送ajax请求给目的服务器,目的服务器会响应json数据{code: 400, Message: 需要登录! data:{}}给前端,前端根据响应码进行相应的页面跳转,然后也可以将获取到的数据展示在页面上;三、nginx搭建https服务3.1 第一步实现利用https协议访问原先的http接口nginx端口监听
2021-12-31 10:57:16
1597
原创 argument type mismatch(注解@TableId(value = “id“,type = IdType.AUTO) 和 @TableField)
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id’ of ‘class com.example.finalspringsecurity.entity.Log’ with value ‘1476725931937652738’ Cause: java.lang.IllegalArgu
2021-12-31 09:50:03
1732
原创 跨域问题详解(1-跨域解释以及解决办法;2-整合nginx重复配置跨域导致 ‘Access-Control-Allow-Origin‘ contains multiple values)
问题一:No ‘Access-Control-Allow-Origin’ header is present on the requested resource.跨域:在当前页面想要访问其他页面,主要端口、ip、协议有一个不一样就会被定义为跨域;例如:在前后端分离的项目中,一个熟悉的场景:前端页面发送ajax请求给后端,后端返回json数据,前端拿到返回的数据进行响应的页面跳转以及数据的展示;前端:http://front.smile.com:5500/login.html;页面发送ajax请求,给
2021-12-31 09:18:24
6724
原创 The driver has not received any packets from the server.(linux中关于mysql相关命令)
原因:呃呃、重启服务器,没有重新启动mysql;linux中关于mysql相关命令1、检查MYSQL是否已安装:yum list installed | grep mysql2、查看mysql安装目录:whereis mysql3、启动linux服务器中mysql命令:systemctl start mysqldsystemctl enable mysqldsystemctl status mysqld3、进入mysql:mysql -uroot -pthe last packet s
2021-12-27 19:11:50
2409
原创 Nginx整合静态资源出现404解决办法(alias正确用法)
需求:通过nginx访问静态资源login.html;正确配置:server { listen 8089; server_name localhost; location /static { alias D:/web; autoindex on; } }访问http://localhost:8089/static/login.html;匹配路径为/static,剩下的是/login.html
2021-12-26 20:10:40
2143
原创 通过配置修改springsecurity中cookie生效方式(domain + path + secure + samesite)
我们可以通过配置以下参数来修改默认cookie的生效方式;一、server.servlet.session.cookie.secure=true(只在访问HTTPS中进行传输cookie)测试:访问:http://localhost:8080/admin/acl/user/getTitle/smile 需要认证后才可以访问;登录完成后有了cookie,照理说再次访问http://localhost:8080/admin/acl/user/getiphone由于我这边不是https所以不会携带cooki
2021-12-18 22:34:50
4082
原创 nginx.conf配置文件常用配置详解(负载均衡+https服务 + client-nginx-server长连接配置 + 大量TIME_WAIT)
最近在学nginx,利用nginx实现以下两个功能,但是对于一些配置含义还不是很了解,本文主要对实现以下两个功能的nginx配置文件一些配置属性进行解释;一、功能:负载均衡+https服务1、访问:http://localhost/test请求实现负载均衡;2、利用nginx搭建https服务;二、nginx.conf配置文件,对于每个属性有响应的解释#nginx.conf配置文件#user nobody;worker_processes 1; #工作进程:数目。根据硬件调整,通常
2021-12-18 20:50:39
1834
原创 Nginx相关命令以及配置文件常见报错
1、启动ngnix:直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx2、关闭ngnix: nginx -s stop 或者 nginx -s quit ; 这种关闭方式没有彻底杀死nginx,访问http://localhost/,依旧会跳转到Welcome to ngnix页面;stop表示立即停止nginx,不保存相关信息;quit表示正常退出nginx,并保存相关信息3、彻底ngnix: taskkill /im nginx.exe
2021-12-14 09:32:33
2957
原创 https - nginx反向代理 - nginx端口映射
1、https实现:数据加密传输(对称密钥)、验证服务器身份(非对称加密,公钥签名私钥验证);2、ngnix反向代理: ngnix在服务端,发送给服务器的请求首先会经过ngnix,ngnix根据映射规则去寻找目的服务器然后返回数据;区别于正向代理翻墙工具(软件运行在客户端,我们直接访问目标地址,代理会帮助我们去寻找);3、所以想要利用ngnix搭建https服务,只需要让ngnix服务器拥有属于自己的私钥server_nopwd.key,然后根据私钥生成可用于认证的证书server.crt;4、将生成
2021-12-13 22:20:10
2387
原创 Log4j漏洞分析
先看问题:原本我只是希望logger.info(“hello,{}”,message); 用message来替换{}输出:hello,pxq;但是假如我的message是${java:os},就是输出设备的具体信息;像这种可能存在隐患;进一步如果String strings = “${jndi:rmi://127.0.0.1:1899/asd}”; 就会去执行注册中心127.0.0.1:1899中的名为asd的服务,只要用户使用了logger.info()且版本在log4j-api的版本在2.14.0
2021-12-13 21:45:13
2618
原创 无法与远程服务器中的Redis建立连接原因:Centos 7防火墙没有开放6379端口
无法与远程服务器(Centos 7)中的Redis服务器建立连接原因:Centos 7防火墙没有开放6379端口现象: Redis Desktop Manager无法连接远程服务器(Centos 7)中的redis服务端;在本机终端输入命令telnet ip地址 6379也显示无法获取连接;springbootl里面的程序也是运行错误,显示连接超时;Caused by: io.netty.channel.ConnectTimeoutException: connection timed out: ip
2021-12-08 20:40:54
972
原创 Mysql默认配置导致Mybatis-plus批处理性能受限
结论:1、默认情况下,Mysql驱动在在默认情况下会无视executeBatch()语句;把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。2、MySQL的JDBC连接的url中要加&rewriteBatchedStatements=true参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入,另外这个选项对INSERT/UPDATE/DELETE都有效。url: jdbc:mysql://ip地址:3306/em
2021-12-02 21:57:04
1509
原创 Springsecurity-Remember me(四)
实现Remember me功能;1、创建临时登录的数据库 CREATE TABLE `persistent_logins` ( `username` VARCHAR(64) NOT NULL, `series` VARCHAR(64) NOT NULL, `token` VARCHAR(64) NOT NULL, `last_used` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE C
2021-12-02 20:21:24
508
原创 Springsecurity-HttpSecurity(三)
1、接着Springsecurity(二)书写配置文件,重写configure(HttpSecurity http)方法。配置自定义的登录页面,登录访问路径(等于前端表单的action地址),成功登录后的跳转地址。@Configurationpublic class SecurityConfig1 extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService
2021-12-02 19:37:34
370
原创 SpringSecurit实际操作(账号密码数据库)(二)
1、创建springboot项目,导入依赖;<!--导入spring-security依赖就默认进行配置,访问controller就会跳转到默认页面进行登录访问--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency&
2021-12-02 15:12:43
996
原创 TCP建立后数据传输完长时间不交互会出现什么?(TCP的Keepalive机制)
问题:客户端和服务器建立起TCP连接后,如果双方长时间不进行通信,会出现什么情况?如何保证连接的存活?分析:在实际现实中,建立起长连接后客户端可很意外失联的情况,这些TCP连接并未来得及正常释放,长时间的积累会导致非常多的半打开连接,造成资源浪费,也有可能一个正常的请求得不到正常的返回。所以服务器端就有了TCP的Keepalive机制。*如上图所示,长时间不通信,服务端会给客户端发送一个TCP Keep-Alive来查看客户端是否还存活,如果客户端没有应答,服务端超时没有收到回复就会再次重新发送;连
2021-11-29 22:45:28
2570
原创 tcp/ip三次挥手? YES
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-11-29 20:28:25
307
原创 SpringSecurity入门(一)
SpringBoot + SpringSecurity + MybatisPlus完成查询数据库完成用户认证文章目录SpringBoot + SpringSecurity + MybatisPlus完成查询数据库完成用户认证前言一、概览二、入门案例1.默认配置进行注册登录(默认密码)2.修改账号密码的三种方式三、SpringBoot + SpringSecurity + MybatisPlus完成查询数据库完成用户认证(完整过程)1.引入依赖2. 创建数据库以及对应的实体类3. 连接数据库4. 整合MyB
2021-11-16 18:49:16
766
原创 微服务架构
最近一直在准备秋招提前批的笔试面试,空闲之余记录一下最近学习的一些分布式微服务相关的一些知识什么是微服务架构:什么是微服务架构:实际项目开发过程中按照模块进行开发,部署时候每一个模块可能部署到不同的服务器,此外,同一个模块可能会复制多份进行集群部署;思考一下问题?不同模块需要去相互调用,如何去发现其他的服务?同一个服务由于存在不同的备份,我们应该去选择哪一个?同一个服务存在多个不同的备份,每一个备份都有对应的配置文件?怎么高效修改配置文件让所有的配置文件都一起修改?由于存在多个服务,如果客户端
2021-07-29 08:55:31
80
原创 浅拷贝-深拷贝总结
浅拷贝-深拷贝总结浅拷贝:基本数据类型引用数据类型值传递成员变量的引用值(内存地址)复制(实际指向同一个)深拷贝:基本数据类型引用数据类型值传递new一个新对象,进行属性赋值浅拷贝两种实现方法1、拷贝构造函数一个学生类,包含两个属性,一个是基本数据类型name,一个是引用数据类型Agepublic class Boy { String name; Age age; public Boy() { }
2021-05-31 18:49:06
76
原创 【Java】Comparator<T>接口的使用
【Java】Comparator<T>接口的使用需要对数组里面的对象根据指定属性进行排序:例如将下面的对象根据年龄进行排序排序前:Person{name=‘p’, age=23}Person{name=‘m’, age=29}Person{name=‘h’, age=26}排序后:Person{name=‘p’, age=23}Person{name=‘h’, age=26}Person{name=‘m’, age=29}首先介绍一下Comparator接口,通过实现此接口重写comp
2021-05-31 14:28:24
465
原创 模拟排队论(多线程高并发)亲测有效
排队论的场景(可以根据自己的需求进行修改):假设医院上午工作时间8:00-11:00,下午工作时间2:00-500,医院只有五个窗口可以进行就诊且医生就诊完一位病人的时间固定(处理时间固定),我们通过Random类随机生成病人到达医院的时间点并且可以进行更改使得一个时间段的病人很多。通过输出每一个病人响应时间计算出平均响应时间,从而进行效率分析。话不多说上代码import java.util.Arrays;import java.util.Random;import java.util.concu
2021-05-27 08:52:22
335
原创 Redis6的适用场景以及原理
Redis61.NoSQL数据库:解决性能(用户量增加性能技术)的问题为了解决CPU以及内存压力:1、采用服务器集群分布式部署 ,实现负载均衡2、采用反向代理nginx,可以用户感受不到服务器的切换问题:从一个服务器到另一个服务器,用户切换情况下session(服务端)应该放在哪里?解决方法:1、cookie放在客户端,不安全;网络负担效率低2、放在文件服务器,需要进行IO读取3、服务器冗余备份,浪费空间4、采用redis,将数据缓存在数据库中(内存)为了解决IO压力,需要频繁进行
2021-05-14 12:22:59
83
原创 cookie和session的详解与区别
会话(Session)跟踪用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。1.1 Cookie机制一个用户的所有请求操作都应该属于同一个会话,HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。为弥补HTTP协议无状态的不足,在Session出现之前,基本上所有的网站都采用Cookie来跟
2021-04-28 22:37:56
126
原创 为什么说java是解释与编译共存的语言?(JIT即时编译器用于保存热点代码的字节码对应的机器码)
为什么说java是解释与编译共存的语言?1、先解释“解释”java源文件通过JDK中的javac编译成字节码文件,字节码文件到机器码这一步,JVM类加载器首先需要加载字节码文件,然后通过解释器逐行解释执行。2、再解释“编译”逐行解释执行字节码文件中的某些方法和代码时,有部分代码重复执行,为提高效率,即时编译器将这部分字节码的机器码保存下来,就不需要重复解释。下次直接使用...
2021-04-27 10:38:37
578
原创 面向对象和面向过程的区别-java与C/C++编译器对比-java和C++的区别
1、面向对象和面向过程的区别面向过程:性能高于面向对象,因为面向对象在类调用时需要实例化对象,开销比较大,比较消耗资源,当性能为最重要的考虑因素时,比如:单片机、嵌入式开发一般采用面向过程。面向对象:易维护、扩展、易复用;因为面向对象具有封装、继承、多态的特性,容易设计出低耦合的系统java性能低于c是因为以上原因嘛?面向对象面向过程?原因:程序的性能首先由编程语言的执行方式有关,其次才是设计范式这个并不是根本原因,面向过程也需要分配内存,计算内存偏移量,Java性能差的主要原因并不是因为它是
2021-04-27 09:16:33
311
原创 设计模式(一):单例模式以及volatile在单例模式中的应用(禁止指令重排序)
饿汉式:私有化构造方法,不管需不需要用到Mgr01实例,先创建一个实例,仅提供一个共有的获取实例的方法(线程安全)懒汉式:私有化构造方法,提供一个静态获取Mgr03实例的方法(首先判断实例是否已经创建,没有创建才会开始创建实例)(线程不安全)私有化构造方法,将获取实例的方法用synchronize修饰同步方法,效率不高原因:synchronize修饰方法需要注意同步代码的范围不能太大也不能太小,太大效率不高,太小线程不安全(线程安全,效率不高)还是线程不安全,原因:一开始还没有创建实例,多个线程
2021-04-20 16:53:25
128
原创 Spring5框架完整(四)注入其他类型属性(空值或者特殊字符、外部bean、内部Bean、级联赋值、集合属性)
一、注入的属性为空值或者特殊字符Book类public class Book { private String bname; private String bauthor; public void setBname(String bname) { this.bname = bname; } public void setBauthor(String bauthor) { this.bauthor = bauthor;
2021-04-19 17:07:07
400
原创 Spring5框架完整(三)注入属性的三种方式(set方法、构造器、p名称空间:本质还是set方法)
一、通过set方法注入属性Book类public class Book { private String bname; private String bauthor; public void setBname(String bname) { this.bname = bname; } public void setBauthor(String bauthor) { this.bauthor = bauthor; }
2021-04-19 15:12:58
226
1
原创 Spring5框架完整(一)(入门案例一:Spring实现通过配置xml实现对象的创建方法调用)
1、导入Spring中ioc的基本jar包2、创建User类以及add方法public class User { public void add(){ System.out.println("add"); }}3、书写XML配置文件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xml
2021-04-19 14:28:52
137
原创 synchronize底层原理
1、java代码层面预备知识:对象在内存中的内存布局synchronize可以用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。1、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。2、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非s.
2021-04-19 11:01:36
187
原创 超线程、三级缓存、缓存行、缓存行对齐(详解)
计算机组成结构总览首先介绍一下应用程序的执行过程:qq.exe在硬盘,首先将应用程序(一行行代码)读入内存,CPU一条一条从内存中取指令(一行行代码),数据读取进入寄存器,使用ALU进行一系列的计算,结果写会内存,下一条指令根据PC读取。超线程通过了解了ALU算数逻辑单元以及PC这两个概念后,我们就可以很好地理解超线程这一个概念,单核中只有一个寄存器以及一个PC,每次只能一个线程执行,当想要进行线程切换时,需要将这一个寄存器以及PC中的数据保存起来,而在超线程中一个核拥有两个寄存器以及两个CPU,但
2021-04-19 10:32:23
557
1
原创 多线程锁状态以及锁升级过程
多线程锁状态图锁升级的过程(接下来会进行一一解释)上篇文章介绍的对象内存布局有解释markword统一解释:偏向锁位以及锁标志位用于区分是哪一种锁状态一、无锁态刚new出一个对象,没有线程需要使用这个对象,此时对象的markword对象头8字节中记录的锁信息如下图所示:二、偏向锁第一个线程使用这个对象时,会将对象的markword对象头切换为偏向锁状态,如下图所示,其中最关键的标红字段记录了当前线程的指针,表明当前对象被锁住,只偏向于当前线程。三、轻量级锁当有任何一个线程开始竞争该
2021-04-16 16:18:37
192
1
原创 面试题(对象在内存中的内存布局):Object o = new Object()在内存中占多少字节
面试题(对象在内存中的内存布局):Object o = new Object()在内存中占多少字节一、首先我们利用ClassLayout类去解析实例对象并打印输出并进行分析输出结果:以上运行结果与下面这张图(对象在内存中的存储布局)一致;markword对象头占8字节:用于存储锁信息(后续将锁升级过程中会提及)类型指针如果采用压缩指针的方式则占4字节,没有采用压缩指针则占8字节实例数据:由于我们这边只new了一个对象,没有设置成员变量,这边为0;假如有int类型的变量则为4字节对齐是为了保证
2021-04-16 15:28:19
265
原创 CAS(底层原理以及存在的问题解决方法)
CAS(compare and swap比较并且交换 )作用:在不使用锁的情况下支持多线程,CAS又被称作:轻量级锁,无锁,自旋锁(很形象,后续会解释)整体过程(举例:多线程情况下实现对某个数字A实现加1操作)首先读取这个数字A当前值,执行+1操作获得结果值A+1,接下来会进行比较并且交换操作:将原先读取的当前值与当前新值进行比较,相等再进行替换操作,用结果值替换原先的值,不相等会重复执行以上步骤,这一步自旋的过程呼应上面说的自旋锁存在的问题:1、虽然我们比较结果相同,但是会不会在交换的时候数据
2021-04-15 23:43:22
260
原创 Spring5框架完整(二)底层原理(Spring = XML解析 + 注解 +反射+ 工厂模式)
Spring = XML解析 + 注解 + 工厂模式以下介绍通过以上三个技术实现对象的创建以及对象方法的调用;目的:通过Spring方法创建对象实现对象方法调用降低类与类之间的耦合性User类public class User { public void add(){ System.out.println("finish;"); }}XML文件:接下来会讲如何通过XML解析来读取XML中的标签的属性值<?xml version="1.0" encodin
2021-04-06 21:31:23
215
转载 Java基础之—反射
框架 = 反射 + 注解 + 设计模式反射是框架设计的灵魂一、反射的概述通过预先在程序中书写的代码来实现在程序运行状态下,动态获取这个类的所有属性和方法,以及可以调用实例对象的任何一个方法和属性。提前条件:必须首先获得Class类编译后的字节码文件,因为字节码文件中包含类的所有信息:成员变量、方法、构造器等信息反射就是将java类中的各个成分映射成一个个java对象二、熟悉一下类加载机制:Java是纯粹的面向对象编程的语言,所有的类都源于java.lang.Object,以上JVM根据字节码
2021-03-25 10:54:16
143
Database - myemployees
2021-02-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人