- 博客(37)
- 资源 (3)
- 收藏
- 关注

原创 面试要掌握的点-持续更新
面试要掌握的点Java核心数据库方面Web端JavaEE框架JavaEE高级工具方面Java核心Java基础;集合(其中HashMap相关的问的最多);多线程,高并发(JUC);网络编程,IO和netty框架的理解;数据结构和算法;设计模式;Java新版本的新特性;JVM的理解和优化。数据库方面Mysql数据库的设计,开发和数据库事务;Mysql数据库优化;Mysql数据库集群;Mysql数据库的分布式存储和分库分表中间件的使用(mycat和sharding-jdbc);
2020-07-26 15:49:14
208
原创 Java多条件排序使用Comparator和thenComparing不生效问题记录
排序是从左往右进行运算的,会对整体就行一个倒序,要分别在各自内部就行排序。
2024-07-29 14:57:59
594
原创 面试题总结
一、尚硅谷面试题系列1.考察自增变量,示例:public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println(i); System.out.println(j); System.out.println(k);}考察虚拟机栈中的栈帧,栈帧包括局部变量表,操作数栈,动态链接,方法返回地址,附加信息;参考连接
2021-09-05 00:40:35
249
原创 假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位
分析的思路是结合Linux和Jdk命令一起进行分析案例步骤:1.首先用top命令找出cpu占比最高的结合上图分析出,是pid为5101的进程占用cpu比例较高2.再使用ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序3.再定位到具体线程或者代码,使用ps -mp 进程id -o THREAD,tid,time命令查看,其中pid是指定进程id,而tid是线程id,对应的命令是ps -mp 5101 -o THREAD,tid,time,结果如下图可以看到5102的线程id占
2021-09-04 15:24:11
2421
原创 ElasticSearch-常用的几种Java客户端
ElasticSearch常用的Java客户端总体上,分为Java API Client和Java Rest Client1.Java API ClientJava API Client默认连接的是9300端口,传输协议,依赖netty,tcp协议Java API Client不同版本有兼容问题Java API Client通过方法调用完成交互,有丰富的API2.Java Rest ClientJava Rest Client默认连接的是9200端口,http协议Java Rest C
2021-08-08 11:10:35
1960
原创 Jdk1.8下ConcurrentHashMap常用方法的源码分析
1.首先从下面这段代码开始分析 ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>(); map.put("123", "1"); map.put("234", "2"); System.out.println(map.get("123")); System.out.println(map.size());2.我们先从put方法看起public V put(K key, V value) {
2021-07-13 16:32:55
260
原创 Jdk1.8下HashMap常用方法的源码分析
1.首先是从hashmap中put元素开始分析 HashMap<String, String> map = new HashMap<>(); map.put("123", "1"); map.get("123");2.点击put方法进入到里面public V put(K key, V value) { // hash(key) 计算key对应的hash值 return putVal(hash(key), key, value, false, true);}继
2021-07-11 18:58:17
149
原创 java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
1.事情起因:项目中有一段代码是调用awt包下的createGE()方法生成图片的,在windows环境下调用正常,但是linux环境下运行的项目调用却报错2.报错信息:10-Jul-2021 17:33:46.248 严重 [http-nio-8085-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke 在路径为/meeting-duty的上下文中,Servlet[springServlet]的Servlet.service()
2021-07-10 18:51:15
6735
原创 Jdk1.7下ConcurrentHashMap常用方法的源码分析
1.首先从下面这段代码的看一下它的构造方法ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();map.put("123", "1");2.点击进入到构造方法中 public ConcurrentHashMap() { // 默认容量,默认加载因子,默认并发级别 this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CO
2021-07-05 18:31:16
216
原创 Jdk1.7下HashMap常用方法的源码分析
1.首先是从hashmap中put元素开始分析 HashMap<String, String> map = new HashMap<>(); map.put("123", "1"); map.get("123");2.点击put方法进入到里面public V put(K key, V value) { // 初始化动作 if (table == EMPTY_TABLE) { inflateTable(threshold);
2021-07-01 15:44:19
203
原创 HashMap 和 Hashtable 的区别
HashMap 允许 key 和 value 为 null,Hashtable 不允许。HashMap 的默认初始容量为 16,Hashtable 为 11。HashMap 的扩容为原来的 2 倍,Hashtable 的扩容为原来的 2 倍加 1。HashMap 是非线程安全的,Hashtable是线程安全的。HashMap 的 hash 值重新计算过,Hashtable 直接使用 hashCode。HashMap 去掉了 Hashtable 中的 contains 方法。HashMap 继承.
2021-05-06 18:43:47
122
转载 Unix下可用的5种I/O模型
先列举一下Unix下可用的5种I/O模型:阻塞式I/O非阻塞式I/OI/O复用信号驱动I/O异步I/O对各种模型讲个故事,描述下区别:故事情节为:老李去买火车票,三天后买到一张退票。参演人员(老李,黄牛,售票员,快递员),往返车站耗费1小时。阻塞式I/O我们最熟悉的I/O模型就是阻塞式I/O模型,在上图中,应用进程系统调用recvfrom接收数据,但是此时内核缓冲区中数据报还未准备好,所以应用进程会一直阻塞直到内核缓冲区有数据报到达且被复制到应用进程缓冲区例子:老李去火车站买票,
2021-04-08 15:56:40
192
原创 通俗理解TCP的三次握手和四次挥手
TCP的协议负责计算机之间的网络连接,下面就以一个客户端一个服务器为例子记录它们之间传输的步骤(类比男女朋友之间通信)。三次握手:1.第一次握手是客户端发送SYN数据包,并设置seq序列号为j,客户端进入SYNC_SENT状态。(小扎给小美写信表白)2.第二次握手是服务器端收到数据包后,返回一个SYN包设置seq=k,同时返回一个ACK的包设置seq=j+1,进入SYN_RCVD状态。(小美给小扎回信同意建立恋爱关系,小扎收到信后,确认他们之间的通信没有问题)3.第三次握手是客户端收到ACK
2021-04-08 15:26:26
684
原创 MySQL索引失效的案例
1.针对联合索引查询的时候要遵循最左前缀原则,查询条件中带头字段一定要写上,中间字段不能断,要连续,例如:2.不要在索引列上做任何操作(计算、函数、(自动或手动)类型转换),例如下面会导致索引失效:3.存储引擎不能使用索引中范围条件右边的列,这样会导致范围右边列索引用不上,例如:4.减少select * 的使用,尽量使用覆盖索引(只访问索引的查询索引列和查询列一致),例如:5.mysql在使用不等于(!=或<>) 的时候无法使用索引,会导致全表扫描,例如:6.mysql中过滤
2021-04-04 19:01:44
195
原创 面试题目-表中实现分组并在每组内排序
题目:一个表中有每年每月的记录数据,找出每年中数据最大的对应的月份1.mysql数据库下实现:a).表结构和数据情况如下:b).查询实现步骤:先根据年份分组找出每年中数据最大对应的年份和数量select year,max(num) as num from t_order group by year;然后根据上面结果来一个右连接查询找出相关的记录,这里使用右连接查询减少了关联查询的次数select t1.year,t1.month,t1.num from t_order t1 rig
2021-03-28 18:37:31
198
原创 Spring Security学习记录-关于认证流程的分析
前言刚开始学习spring security的时候认证用户的信息来源是在配置文件中配置加载到内存中,用来实现用户的认证的,但是,在我们的实际项目中用户的信息不可能通过配置文件来配置的,这样很繁琐而且又不安全,所以,这些信息要通过一个落地操作把它们存储起来,这样分开操作也符合了软件设计思想,同时也便于维护,那么我们应该通过怎样的方式来实现自定义方式的数据库认证呢,下面通过来分析认证流程来实现我们想要的方式。源码分析首先我们知道spring security的实现是通过一个个的filter来实现的,这里提
2021-03-13 19:34:38
226
1
原创 Spring Security学习记录-关于登录页面和登录接口设置
前言首先在Spring Security中,如果我们不做任何配置的话,默认的登录页面和登录地址都是/login,这是为什么呢?如果要把这两个地方设置为我们自定义的又该如何设置呢?默认情况下-分析过程在 Spring Security 中,如果我们不做任何配置,默认的登录页面和登录接口的地址都是 /login,也就是说,默认会存在如下两个请求:GET http://localhost:8080/loginPOST http://localhost:8080/login如果是 GET 请求表示你想
2021-03-13 12:10:15
6069
原创 SpringBoot项目中的@Component注解下的类无法@Autowired注入的时候为null
前言本地在springboot环境下搭建接口防刷项目时候,封装一个通用的redis工具类,在带有@componet的拦截器的类使用@autowired注入的时候为null,也就是没有注入成功,或者说此类在bean加载之前就被调用了。下面提供了两种解决办法供大家参考。1.使用@PostConstruct注解,将需要注入的类添加到静态变量中示例代码: // redis工具类 @Component public class RedisUtil { @Autowired private
2021-03-11 11:32:00
3724
1
原创 使用RSA对前台账号密码加密后台解密流程记录
前言:项目使用base64对用户账号和密码进行编码,然后通过网络输出到后台,由于base64是可逆的,所以攻击者很容易就知道了这些敏感信息。所以,要对这些敏感信息先加密输出到后台,然后后台进行解密,这就要前台和后台约定好加密和解密的密钥,刚开始想法是使用AES对称加密,但是由于要将密钥在网络上进行传输,这种就造成攻击者很容易截取信息进行伪造,所以改用了RSA非对称加密对账号和密码对这些敏感信息加密,前台先从后台获取公钥,后台生成对应的私钥并存储,然后使用公钥对敏感信息进行加密传输到后台,后台接收之后使用之.
2021-03-04 10:38:22
612
1
转载 Mixed Content: xxx This request has been blocked; the content must be served over HTTPS.
在升级https的过程中,出现如下问题:Mixed Content: The page at ‘https://www.xxx.com/denglu.html’ was loaded over HTTPS, but requested an insecure script ‘http://qzonestyle.gtimg.cn/qzone/openapi/qc-1.0.1.js’. This request has been blocked; the content must be served over
2021-02-22 15:26:24
1353
2
原创 Oracle数据库下sys和system用户如何修改密码
修改步骤:(1)通过在cmd下 输入命令: sqlplus /nolog ,进入oracle控制台(2)接着并输入connect / as sysdba使用conn连接sysdba登录,当然前面两步也可以直接在cmd下输入sqlplus直接连接sysdba登录(3)连接成功后,输入“select username from dba_users”查看用户列表(4)若修改某一个用户密码, 修改用户口令 格式为:alter user 用户名 identified by 新密码;以 sys 为例,密码修改
2021-02-19 16:29:03
1591
1
原创 Centos7下搭建k8s集群(kubeadm方式)
文章目录一、搭建方式介绍二、使用(Kubeadm)部署步骤1.环境介绍2.修改hostname文件3.修改hosts文件4.关闭防火墙和关闭SELinux5.设置允许路由转发6.kube-proxy开启ipvs的前置条件6.所有节点关闭swap7.安装kubelet、kubeadm、kubectl8. 部署Kubernetes Master9. Node节点加入集群一、搭建方式介绍方式一:Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开
2021-01-18 16:11:44
565
原创 解决docker-compose: 未找到命令问题
1.在本地 使用docker-compose 来启动 ZK 集群时,报 bash: docker-compose: 未找到命令…这样的错误;2.所以通过下面的命令执行安装:a). 线上拉取文件,curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-uname -s-uname -m > /usr/local/bin/docker-composeb). 授权权限访问,chmo
2020-12-16 16:09:26
6088
原创 ElasticSearch-官网中文文档的学习记录
本地使用的elasticsearch版本是5.6.81.基于脚本给 tags 数组添加一个新的标签的时候报错记录:a).按照文档的操作方式,在postman中执行下面的请求时POST /website/blog/1/_update{ "script" : "ctx._source.tags+=new_tag", "params" : { "new_tag" : "search" }}会提示如下错误,这是由于版本之间的语法不同造成的b).之后从网上搜索,按照这个
2020-11-21 11:59:47
503
1
原创 ElasticSearch-05windows本地环境下搭建集群
部署环境: win10,es5.6.81.首先通过地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch 下载对应的版本,再解压文件,复制三份到本地,并分别命名文件夹为es-cluster-01,es-cluster-02,es-cluster-03,便于标识区分:2.修改三个节点对应的配置文件:a).在第一个配置文件添加如下内容#节点1的配置信息:#集群的名称,保证唯一cluster.name: my-elasti
2020-11-17 18:31:51
159
原创 ElasticSearch-04IK分词器的安装与使用
文章目录一、ik分词器的下载二、安装配置三、运行加载四、测试使用之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了。一、ik分词器的下载下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases ,这里你需要根据你的Es的版本来下载对应版本的IK,这里我使用的是5.6.8的ES,所以就下载el
2020-11-17 15:06:50
141
原创 ElasticSearch-03安装Head插件
文章目录一、head插件二、安装步骤1.es5.0以下的版本安装方式2.es5.0以上的版本安装方式一、head插件为了便于管理ES,本文使用head插件,这是最初级的管理工具,在浏览器中显示ES集群,索引等信息,十分好用。二、安装步骤1.es5.0以下的版本安装方式按住Windows+R,输入cmd,打开命令行工具,进入到ElasticSearch的bin目录,使用ES命令安装插件cd 切换到es安装目录下的bin目录下,并执行以下命令plugin install mobz/elasti
2020-11-17 10:27:32
124
原创 ElasticSearch-02cURL请求提交到 Elasticsearch
文章目录一、cURL是什么?二、cURL下载安装1.下载并解压2.环境变量配置3.验证配置三、cURL操作es一、cURL是什么?cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。二、cURL下载安装windows环境下安装并配置,下载地址:https://curl.haxx.se/download.html1.下载并解压找到对应版本并下载,
2020-11-16 18:29:34
138
原创 ElasticSearch-01相关介绍和基本概念
文章目录一、相关介绍二、相关特性三、基本概念elasticsearch版本: elasticsearch-5.6.8一、相关介绍Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。二、相
2020-11-16 16:58:40
146
原创 centos6.8下安装docker并设置开机自启动
1.Docker使用EPEL发布,RHEL系的OS首先要确保已经持有EPEL仓库,否则先检查OS的版本,然后安装相应的EPEL包:yum install -y epel-release2.安装Docker:yum install -y docker-io3.查看安装之后的配置文件:cat /etc/sysconfig/docker4.启动Docker后台服务:service docker start5.验证:docker version6.设置docker开机自启动:chkconfig dock
2020-11-12 18:34:32
648
原创 分布式下数据库分库分表之后全局主键id生成的几种方式
1.UUID:不适合作为主键,因为太长了,并且无序不可读,查询效率低。比较适合用于生成唯一的名字的标示比如文件的名字。2.数据库自增 id : 两台数据库分别设置不同步长,生成不重复ID的策略来实现高可用。这种方式生成的 id 有序,但是需要独立部署数据库实例,成本高,还会有性能瓶颈。3.利用 redis 生成 id : 性能比较好,灵活方便,不依赖于数据库。但是,引入了新的组件造成系统更加复杂,可用性降低,编码更加复杂,增加了系统成本。4.Twitter的snowflake算法 :Github 地址
2020-11-01 17:52:48
319
原创 MySQL中的主从复制
1.主从复制的原理:2.大概顺序:3.主机修改配置文件:4.从机修改配置文件:5.主机授权:6.从机配置:7.最后判断是否成功:
2020-11-01 17:16:35
77
原创 MySQL中如何锁定一行
1.先关闭mysql的自动提交 SET autocommit = 0;2.在执行begin;开启事务3.然后执行语句锁定一行select * from test_innodb_lock where a=8 for update;4.最后执行commit; 提交后就解锁5.其他操作这一行的将会被阻塞,直到提交后释放锁...
2020-11-01 16:39:23
1563
原创 MySQL中的间隙锁
1.定义:当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”。2.案例:3.危害:简单来说,session1使用了范围条件检索数据,比如id范围在3到10,那么即便id为6的数据不存在,它这不存在的一行也会被锁。如果另一个session想要插入id为6的数据的时候,就会阻塞。...
2020-11-01 16:24:48
124
原创 MySQL中的表读写锁案例
1.创建表:2.如何给增加表锁:3.如何释放表锁:4-1.案例模拟(读锁):总结:给表加读锁时,对应的session给表加读锁之后,可以查询该表的数据,但是不能更新该表的数据,也不能查询其他没有加锁的表,其他的session能查询加锁表和查询和更新其他的未锁定的表的数据,但更新加锁表的数据操作会阻塞,直到对应的表解锁才能继续执行。4-2.案例模拟(写锁):总结:给表加写锁时,对应的session给表加读锁之后,可以查询和更新该表的数据,但是不能查询其他的表,其他的sess
2020-11-01 16:12:01
499
原创 MySQL索引失效的原因总结
MySQL索引失效的原因总结使用索引时数量和顺序应该和创建索引时是一致的,保证全值匹配;最佳的左前缀法则;不要在索引列做任何操作(计算,函数,(自动和手动)类型转换),会导致索引失效;存储引擎不能使用索引中范围条件右边的列;尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少使用select *;mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描;is null,is not null也无法使用索引;like以通配符开头(’%abc…’)索引失效
2020-10-31 16:30:28
203
原创 使用pip包管理器连接超时问题
1.遇到问题:安装完python之后,使用pip包管理器安装包的时候提示:Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection brokenby 'ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x10b058850>
2020-09-17 23:36:22
591
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人