自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wjg_selected的博客

相逢便是缘,欢迎大家私信交流和学习

  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java构造函数详解

Java构造函数详解构造函数的特点:每个类都默认有一个无参的构造函数,如果自己定义了构造函数,则默认的构造函数被覆盖,一个类可以存在多个构造函数(重载)构造函数名称必须和类名相同构造函数没有返回类型构造函数在创建对象时自动调用或者在子类构造函数中用super()或super(参数)方式调用构造函数的作用:对象在调用功能之前,对对象进行初始化,比如赋初值之类的。创建对象时自动调用:public class Demo3 { public Demo3(){ System

2020-11-17 15:34:27 290

原创 redis安装教程

1.下载redis到Linux系统wget https://download.redis.io/releases/redis-5.0.12.tar.gz 2.解压tar -xvzf redis-5.0.12.tar.gz3.编译安装redis进入解压后的目录,在redis目录下,编译安装redismakemake install4.启动redis进入redis的src目录在src目录下启动redis-server./redis-server注意

2021-07-01 22:37:43 112

原创 Java数组+链表简单实现HashMap的put和get

本例子实现了Java数组+链表实现HashMap,可往HashMap中存null值。public class MyHashMap<K,V> { //定义一个数组 private Entry<K,V>[] entries=new Entry[1000]; class Entry<K,V>{ K k; V v; Entry next; public Entry(K k, V v)

2021-07-01 19:13:13 243

原创 Java基于数组ArrayList实现HashMap

本例子使用Java基于数组ArrayList简单实现HashMap的get和put功能public class ArrayListHashMap<K,V> { private List<Entry<K,V>> entries=new ArrayList<>(1000); class Entry<K,V>{ K k; V v; public Entry(K k, V v) {

2021-07-01 18:29:08 350

原创 为什么重写equals还要重写hashcode方法?

Object 的 hashcode 方法是本地方法,也就是用 c 或 c++ 实现的,该方法直接返回对象的内存地址,让后再转换整数。使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。Object 默认的 equals方法是比较两个对象的内存地址两个常见的规定3. 两个对象的Hashcode值相等,但是两个对象的内容值不一定相等(Hash冲突的问题)从上面可以看出,这两个对象的内容值是不同的,但hashcode相.

2021-07-01 15:58:22 164

原创 redis如何从海量数据中快速找到所需?

如何从海量数据中快速找到所需?分片:按照某种规则去划分数据,分散存储在多个节点常规的按照哈希划分无法实现节点的动态增减改进使用一致性哈希算法:对2^32取模,将哈希空间组织成虚拟的圆环。一致性哈希可能会造成哈希环的数据倾斜问题,于是引入虚拟节点解决数据倾斜的问题...

2021-06-28 18:40:32 333

原创 Pipline及主从同步

使用Pipline的好处Pipline和Linux的管道相似redis基于请求/响应模型,单个请求处理需要一一应答Pipline批量执行指令,节省多次IO往返的时间有顺序依赖的指令建议分批发送redis的同步机制主从同步原理全同步过程:(1)Salve发送sync命令到Master(2)Master启动一个后台进程,将redis中的数据快照保存到文件中(3)Master将保存数据快照期间接受到的写命令缓存起来(4)Master完成写文件操作后,将该文件发送给Salve(5)Salve接受

2021-06-28 17:44:32 59

原创 redis如何持久化

1. RDB(快照持久化):保存某个时间点的全量数据快照SAVE:阻塞redis的服务器进程,直到RDB文件被创建完毕BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程(后台运行)自动触发RDB持久化的方式:(1)根据redis.conf配置里的 SAVE m n 定时触发(用的是BGSAVE)(2)主从复制时,主节点自动触发(3)执行Debug REload(4)执行Shutdown且没有开启AOF持久化缺点:(1)内存数据的全量同步,数据量大会由于I/O而严重影响性能(2)可

2021-06-28 17:17:40 50

原创 如何使用redis做异步队列

使用List做队列,RPUSH生产消息,LPOP消费消息缺点:没有等待队列里有值就直接去消费弥补:可以通过在应用层引入Sleep机制去调用LPOP重试BLPOP key [key …] timeout:阻塞直到队列有消息或者超时缺点:只能供一个消费者消费pub/sub:主题订阅者模式发送者(pub)发送消息。订阅者(sub)接收消息订阅者可以订阅任意数量的频道(topic)消息的发布是无状态的,无法保证可达(可使用专业的消息队列rocketMQ等)...

2021-06-28 14:35:45 324

原创 如何通过redis实现分布式锁

分布式需要解决的问题?互斥性安全性死锁容错(部分宕机)SETNX key value:如果key不存在,则创建并赋值(不能重复设置值)时间复杂度:O(1)返回值:设置成功,返回1;设置失败,返回0解决SETNX长期有效的问题使用EXPIRE key seconds 设置key的生存时间,当key过期时(生存时间为0),会被自动删除缺点:原子性得不到满足SET key value[EX seconds] [PX milliseconds] [NX|XX]EX secon

2021-06-28 14:17:16 45

原创 redis如何从海量key里查询某一固定前缀的key

(1) KEYS pattern:查找所有符合给定模式pattern的keyKEYS指令一次性返回所有匹配的key键的数量过大会使服务卡顿(2) SCAN cursor [MATCH pattern] [COUNT count]基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历不保证每次执行都返回某一个给定数量的元素,支持模糊查询一次返回的数量不可控,只能是大概率符合count参数不会卡顿,但需要对结果去重...

2021-06-28 13:51:59 1125

原创 LeetCode 136. 只出现一次的数字(Java实现)

题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解题思路这个题要线性时间复杂度实现,并且不用辅助空间,就需要使用位运算中的异或运算 XOR,主要因为异或运算有以下几个特点:一个数和 0 做 XOR 运算等于本身:a⊕0 = a一个数和其本身做 XOR

2021-06-24 00:10:50 81

原创 LeetCode 15. 三数之和(Java解法)

题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ,请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]解题思路(双指针)这个题如果使用暴力解法时间复杂度是O(n^3),在这里就不讨论了。这个题可以利用双指针将其分解成两数之

2021-06-23 23:19:27 254 1

原创 Redis的常用数据类型

Redis的一些常见的数据类型String:最基本的数据类型,二进制安全Hash:String元素组成的字典,适合用于存储对象List:列表,按照String元素插入顺序排序Set:String元素组成的无序集合,通过哈希实现,不允许重复Sorted Set:通过分数来为集合中的成员进行从小到大的排序(分数可以重复)用于计数的HyperLogLog,用于支持存储地理位置信息的Geo...

2021-06-23 18:12:49 69

原创 Redis的一些特点

Memcache:代码层次类似于Hash支持简单数据类型不支持数据持久化存储不支持主从不支持分片Redis(底层使用C语言编写)属于类型丰富支持数据磁盘持久化存储支持主从支持分片为什么Redis这么快?完全基于内存,绝大部分请求时纯粹的内存操作,执行效率高数据结构简单,对数据操作也简单采用单线程(串行,不会有锁的消耗问题),单线程也能处理高并发请求,想多核也可启动多实例使用多路复用I/O复用,非阻塞IOFD(文件描述符):一个打开的文件通过唯一的描述符进行引用

2021-06-23 17:51:20 49

原创 SQL的一些关键语法解析

关键语法GROUP BY(按某个条件进行分组)HAVING(过滤组)统计相关:COUNT、SUM、MAX、MIN、AVGGROUP BY:满足select子句的列名必须为分组列或列函数、列函数对于GROUP BY子句定义的每个组各返回一个结果。GROUP BY里出现某个表的字段,select里面的列要么是该GROUP BY里出现的列,要么是别的表的列或者带有COUNT、SUM等函数的列HAVING:通常与GROUP BY子句一起使用、WHERE过滤行,HAVING过滤组、出现在同一SQL的顺

2021-06-23 17:00:22 65

原创 关于幻读的一些问题

当前读和快照读当前读:加了锁(排它锁、共享锁)的增删改查语句快照读:不加锁的非阻塞读InnoDB可重复隔离级别下如何避免幻读?(1)next-key锁(行锁+gap锁)、gap锁:锁定一个范围,但不包括记录本身,为了防止同一事务的两次当前读。(2)若where条件全部命中。则不会用Gap锁,只会加记录锁(3)如果where条件部分命中或者全不命中,则会加Gap锁(4)Gap锁会用在非唯一索引或者不走索引的当前读中...

2021-06-23 16:21:25 38

原创 数据库的事务及各隔离级别下的并发问题

ACID:1.原子性(Atomic)2.一致性(Consistency)3.隔离性(Isolation)4.持久性(Durability)

2021-06-23 15:58:19 58

原创 MySQL数据库的事务机制

什么是事务?事务就是一组原子性的SQL查询或者说一个独立的工作单元,其实你只需要记住:事务内的语句,要么全部执行成功,要么全部执行失败。事务的ACID(即原子性、一致性、隔离性、持久性)原子性:一个事物必须被视为最小的不可分割的工作单元,对于一个一个事务来说,不可能只执行事务中的一部分操作。一致性:数据库总是从一个一致性状态转化到另一个一致性状态,相当于说就是,事务只要没有提交,数据就不会被修改保存到数据库中去,相反,事务一旦提交,数据就会被修改保存到数据库中去。隔离性:一个事务所做的修改在提交前

2021-06-21 17:29:48 177

原创 数据库引擎MyISAM和InooDB锁的区别

MyISAM和InooDB关于锁的区别1.MyISAM默认用的是表级锁,不支持行级锁2.InooDB默认用的是行级锁,也支持表级锁,没有使用索引的列,会上表级锁共享锁和排它锁的兼容排它锁共享锁排它锁冲突冲突共享锁冲突兼容MyISAM适合的场景1.频繁执行全表count语句(MyISAM会用一个变量保存表的行数)2.对数据进行增删改的频率不高,查询非常频繁3.没有事务InooDB适合的场景1.数据增删改查都相当频繁2.可靠性要求比较高(支持事务)

2021-06-21 16:35:09 78

原创 索引建立的越多越好吗

当然不是!!!1.数据表小不需要建立索引,建立索引会增加额外的索引开销2.数据变更需要维护索引,因此更多的索引意味着更多的维护成本3.更多的索引意味着更多的空间

2021-06-21 15:44:52 303

原创 联合索引的最左匹配原则的成因

最左前缀匹配原则1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 3 and b = 4 and c > 5 and d = 6如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。2.=和in可以乱序,比如a = 1 and b = 2and c = 3建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化

2021-06-21 15:41:15 343

原创 如何调优SQL

如何定位并优化慢查询SQL1.根据慢日志定位定位慢查询sqlshow variable like '%quer%';本次会话的慢sql条数show status like '%slow_queries%';打开慢查询日志set global slow_query_log=on;设置慢查询时间set global long_query_time=1;2.利用explain分析慢日志例如explain select name from student order by name d

2021-06-21 15:25:27 38

原创 密集索引和稀疏索引的区别

密集索引:密集索引文件中的每个搜索码值都对应一个索引值稀疏索引:稀疏索引文件只为索引码的某些值建立索引项对于InoDB:若一个主键被定义,该主键则作为密集索引若主键没有被定义,该表的第一个唯一非空索引则作为密集索引若不满足以上条件,InnoDB内部会生成一个隐藏主键(密集索引)非主键索引存储相关键位和其对应的主键值,包括两次查找...

2021-06-21 11:31:40 187

原创 数据库架构及常见索引

一、关系数据库管理系统(RDBMS)的构成:1.程序实例:存储管理、缓存机制、SQL解析、日志管理、权限划分、容灾机制、索引管理、锁管理2.存储(文件系统)二、索引模块1.为什么要使用索引?数据较多时避免全表扫描,使用索引可以快速查询数据2.什么信息可以成为索引?主键、唯一键以及普通键等3.索引的数据结构(1)生成索引,建立二叉查找树进行二分查找(2)生成索引,建立BTree结构进行查找B-Tree特征:1)根节点至少包括两个孩子2)树中每个节点最多含有m个孩子(m>=2

2021-06-19 16:20:59 92

原创 Git基础入门(远程仓库使用码云)

一、安装Git1.可通过淘宝镜像下载,下面附一下链接:http://npm.taobao.org/mirrors/git-for-windows/2.关于安装过程,选择好正确的安装位置,其余的可一路绿灯3.安装好之后,右键打开Git bash,配置自己的用户名和邮箱(与码云上的邮箱一致)$ git config --global user.name "xiaoming"$ git config --global user.email 110.qq.com二、创建仓库(我一般先在码云上创建一个

2021-06-18 21:03:52 77

转载 socket相关介绍(socket编程)

socket简介:socket是TCP/IP协议的抽象,是操作系统对外开放的接口,起源于Unixsocket通信流程socket相关的面试题编写一个网络应用程序,有客户端与服务器端,客户端向服务器发送一个字符串,服务器收到该字符串后将其打印到命令行上,然后向客户端返回该字符串的长度,最后,客户端输出服务器端返回的该字符串的长度,分别用TCP和UDP两种方式去实现TCP实现public class TCPServer { public static void main(String[]

2021-06-17 19:55:00 97

原创 HTTP和HTTPS的区别

一、HTTPS简介二、SSL(安全套接层)1.为网络通信提供安全及数据完整性的一种安全协议2.是操作系统对外的API,SSL3.0后更名为TLS3.采用身份验证和数据加密来保证网络通信的安全和数据的完整性三、加密的方式1.对称加密:加密和解密都使用同一个秘钥(性能更高)2.非对称加密:加密和解密使用的秘钥是不同的(性能较低,但安全性更强,加密长度有限,例如区块链)3.哈希算法:将任意长度的信息转化为固定长度的值,算法不可逆(例如MD5)4.数字签名:证明某个消息或者文件是某人发出/认同的

2021-06-17 19:19:02 53

原创 HTTP相关详解(面试高频问题)

HTTP主要特点:1.支持客户/服务器模式2.简单快速(客户端向服务器请求服务时,只需传送请求方法(get、post)和路径)3.灵活(允许传输任意类型的数据对象)4.无连接(限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户端的应答后断开连接,HTTP1.1起默认使用了长连接,即服务器需要等待一定时间后才断开连接,保证连接特性,在每个独立的HTTP请求中,我们无法知道当前的HTTP是否处于长连接状态,我们只能认为收到客户端的应答后就会断开连接)5.无状态(协议对于事务处理没有记忆能力

2021-06-17 18:39:24 75

转载 TCP的滑动窗口简介

TCP的滑动窗口RTT:发送一个数据包到收到对应的ACK,所花费的时间RTO:重传时间间隔(不是固定的时间,需要根据RTT进行计算)TCP使用滑动窗口做流量控制与乱序重排1.保证TCP的可靠性2.保证TCP的流控特性窗口数据计算过程发送方LastByteWritten: 发送方上层应用写出的数据长度LastByteSent: 通过 TCP 最后发送到接收方的数据位置LastByteAcked: 已经收到接收方的连续最大 ACK 的位置(二次握手)接收方MaxRcvBuffer: 最

2021-06-15 10:25:43 168

原创 TCP和UDP的区别

TCP和UDP的区别一、UDP简介UDP的报文结构二、UDP的特点:1.面向非连接,传输速度快2.不维护连接状态,支持同时向多个客户端传输相同的信息3.数据报文头只有8个字节,额外开销小(TCP报头有20字节)4.吞吐量只受限于数据生成速率,传输速率以及机器性能5.尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表6.面向报文,不对应用程序提交的报文信息进行拆分或者合并(只添加首部后就向下交付给IP层)三、TCP和UDP的区别1.面向连接vs无连接2.可靠性3.有序性4

2021-06-15 09:54:35 72

原创 TCP的四次挥手

TCP的四次挥手挥手是为了终止连接,流程如下:具体流程:1.第一次挥手:客户端发送一个FIN报文,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态2.第二次挥手:服务端接受到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占一个序号,服务端进入CLOSE_WAIT状态)3.第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传输,服务端进入LAST_ACK状态4.第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接

2021-06-13 22:18:35 114 1

原创 TCP的三次握手详解

TCP的三次握手传输控制协议TCP简介:1.面向连接的、可靠的、基于字节流的传输层通信协议2.将应用层的数据流分割成报文段并发送给目标节点的TCP层3.数据包都有序号,对方收到则发送ACK确认(即是确认字符),未收到则重传4.使用奇偶校验和函数检验数据在传输过程中是否有误注意:TCP和UDP数据包都是不包含IP地址信息的,但是均有source port和destination(目的)port。IP地址可以唯一标示一个主机,TCP协议和端口号可以唯一表示主机中的一个进程。TCP Flags1.

2021-06-13 21:42:33 661

原创 TCP/IP简介

TCP/IP协议TCP/IP协议是OSI模型的具体实现先自上而下,后自下而上处理头部数据发送端:每通过一层则增加头部接收端:每通过一层则删除头部

2021-06-13 20:35:03 80

原创 OSI七层协议

七层协议第一层:物理层机械、电子、定时接口通信信道上的原始 比特流 传输 (网卡工作在这一层)第二层:数据链路层物理寻址,同时将原始比特流转变为逻辑传输线路(错误检测、纠正,将比特数据组成了帧,交换机工作在这一层)第三层:网络层控制子网的运行,如逻辑编址,分组传输,路由选择(将网络地址翻译成对应的物理地址,路由器属于网络层,此层数据称为数据包)第四层:传输层接收上一层的数据,在必要的时候将数据进行分割,并将这些数据交给网络层,并且保证这些数据段有效到达对端(OSI模型中最重要的一层)

2021-06-13 20:25:06 350

原创 前端使用LayUI框架,后端使用SSM框架,完成了一个学生管理系统小项目

项目涉及技术:mysql、mybatis-general、LayUI、SSM、Java废话不多说,先看一下项目完成后的效果图(以学习目的,太菜勿喷)一、数据库建表表名student:二、项目中遇到的一些问题后端需要返回一个特定格式的json字符串给前端,否则前端的数据接口会报异常项目使用了mybatis-general自动生成mybatis的相关代码,在配置mybatis-general插件的时候,在pom.xml中配置时需要特别注意插件的配置位置,具体大家可以看一下源代码。LayU

2021-05-28 18:25:33 884

原创 java后端实习第一次面试

2021年5月20日Java实习第一次面试记录面试流程:过去之后,先做了一套笔试题,然后就被工作室老大问问题了。笔试内容:一共有9道笔试题,好像是6道简答题,1道手写编程题,2两道程序题(就问最后输出了什么结果)笔试的题目大概是(答案来源于网络):ArrayList、LinkedList、Vector的区别和实现原理1.存储结构:ArrayList和Vector是按照顺序将元素存储(从下表为0开始),删除元素时,删除操作完成后,需要使部分元素移位,默认的初始容量都是10。ArrayList和Ve

2021-05-20 21:04:40 274 1

原创 Java常见面试题整理(2021)

Java常见面试题整理有需要的,可自行领取链接:https://pan.baidu.com/s/1nJpymV7BNfsB9BSICUKHGg提取码:rwsb复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V4的分享

2021-05-19 21:14:12 97

转载 SpringMVC常见面试题总结

什么是Spring MVC ?简单介绍下你对springMVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。SpringMVC的流程?1.前端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件.

2021-05-13 18:57:21 107

原创 Mybatis面试中的常见问题

Mybatis面试中的常见问题什么是Mybatis?1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。2)作为一个半ORM框架,MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。解释一下MyBatis中的动态SQL对于一些复杂的查

2021-05-13 18:31:33 65

Java学生信息管理系统.rar

使用druid连接池与MySQL数据库,Windowsbuild设计界面,使用者需要提前安装MySQL数据库,运行代码前请先修改的Druid的配置文件的相关配置信息

2020-06-03

空空如也

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

TA关注的人

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