- 博客(61)
- 收藏
- 关注
原创 室友打了一把端游,我入门了Vue
使用工具 vs code建议使用插件 Live Server Preview(方便我们快速查看我们的代码效果)打开官网,我们可以看到如下两种环境因为我们是初学者,我们可以直接最好使用开发环境,这会给我们更好的代码提示,让我们更快入门。根据官网的介绍,我们先入进行入门练习先导入开发环境<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--先在body里面创建一个di.
2021-12-29 08:41:56 13580 96
原创 一不小心就弄懂了 冒泡,选择,插入,希尔,归并和快速排序
今天我们主要看一些简单的排序???? 冒泡排序(Quicksort)算法描述:①. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。②. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。③. 针对所有的元素重复以上的步骤,除了最后一个。④. 持续每次对越来越少的元素重复上面的步骤①~③,直到没有任何一对数字需要比较。为了直观感受,在网上找个动态的演示代码实现:当数组中有n个元素时,只需要进行n轮比较,则整个数组就是有序的pu
2021-12-24 23:19:41 7353 55
原创 Async异步处理【Springboot】
1.先建立一个controller目录,再建一个AsynController.javapackage com.gql.controller;import com.gql.service.AsyncService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springfra
2021-11-27 12:12:21 5985 5
原创 560 和为 K 的子数组
边存边查看map,如果map中存在key为「当前前缀和-k」,说明这个之前出现的前缀和,满足「当前前缀和-该前缀和==k」,它出现的次数,累加给count。遍历nums之前,我们让-1对应的前缀和为0,这样通式在边界情况也成立。其实我们不关心具体是哪两项的前缀和之差等于k,只关心等于k的前缀和之差出现的次数c,就知道了有c个子数组求和等于k。遍历nums数组,求每一项的前缀和,统计对应的出现次数,以键值对存入map。时间复杂度O(n)。空间复杂度O(n)...
2022-07-23 21:07:51 347
原创 322. 零钱兑换
计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。这类涉及状态转移的题目,可以考虑动态规划。你可以认为每种硬币的数量是无限的。...
2022-07-16 23:33:24 261
原创 300. 最长递增子序列
要找到最长的递增子序列长度,每当我们找到一个位置,它是继续递增的子序列还是不是,它选择前面哪一处接着才能达到最长的递增子序列,这类有状态转移的问题常用方法是动态规划。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。给你一个整数数组nums,找到其中最长严格递增子序列的长度。f(1)最长子序列为1。f(2)最长子序列为2。f(3)最长子序列为2。f(4)最长子序列为3。f(5)最长子序列为4。...
2022-07-16 23:30:42 235
原创 岛屿数量vs最大正方形
矩阵中多处聚集着1,要想统计1聚集的堆数而不重复统计,那我们可以考虑每次找到一堆相邻的1,就将其全部改成0,而将所有相邻的1改成0的步骤又可以使用深度优先搜索(dfs)当我们遇到矩阵的某个元素为1时,首先将其置为了0,然后查看与它相邻的上下左右四个方向,如果这四个方向任意相邻元素为1,则进入该元素,进入该元素之后我们发现又回到了刚刚的子问题,又是把这一片相邻区域的1全部置为0,因此可以用递归实现。在一个由‘0’和‘1’组成的二维矩阵内,找到只包含‘1’的最大正方形,并返回其面积。...
2022-07-16 17:06:03 213
原创 如何优化链表的查询效率?
1、参考LRU问题,可以在链表的基础上加一个hashmap如上图所示,在链表法的基础上,使用双向链表把数据串起来,通过这种方式,我们可以把数据的查找,删除和插入的时间复杂度缩短到O(1)。另一方面,可以让散列表可以按某种顺序遍历。下面,我们来看一个经典问题LRU淘汰缓存,在传统的单链表方式下,时间复杂度为O(n),通过上面介绍的散列表+链表的方式,可以将时间缩短到O(1)。LRU算法import java.util.*;public class Solution { //设置双向链表结
2022-05-23 19:42:42 3908 5
原创 【三万字 树据大全】(二叉树,线索二叉树,赫夫曼树,二叉排序树)
创建一个二叉树public class BinaryTree { TreeNode root; public TreeNode getRoot() { return root; } public void setRoot(TreeNode root) { this.root = root; }}创建树节点public class TreeNode { int value; TreeNode leftNode
2022-05-05 15:19:41 756
原创 RabbitMQ
RabbitMQ1 MQ引言1.1 什么是MQMQ(Message Quene) : 翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松的实现系统间解耦。别名为 消息中间件通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。1.2 MQ有哪些当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、
2022-04-18 21:14:52 359 2
原创 Nginx
一、nginx简介Nginx (enginex)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文: PaM6nep)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。nginx 可以做什么事情其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、.
2022-04-18 21:10:28 2683
原创 这可能是最直白的MySQL MVCC
什么是MVCC?百度百科:MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读我们都知道并发访问数据库造成的四种问题(脏写(修改丢失)、脏读、不可重复读、幻读),MVCC就是在尽量减少锁使用的情
2022-03-21 20:01:48 713 4
原创 计算机网络(高频面试题27问)
计算机网络(超高面试题)1.什么是网络协议,为什么要对网络协议分层网络协议是计算机在通信过程中要遵循的一些约定好的规则。网络分层的原因:易于实现和维护,因为各层之间是独立的,层与层之间不会收到影响。有利于标准化的制定应用层应用层的任务是通过应用进程之间的交互来完成特定的网络作用,常见的应用层协议有域名系统DNS,HTTP协议等。表示层表示层的主要作用是数据的表示、安全、压缩。可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。会话层会话层的主要作用是建立通信链接,保
2022-03-18 21:18:51 2574 10
原创 Java-底层建筑-JVM-第3篇-StringTable
Java - 底层建筑 - JVM - 第13篇 - StringTableString的基本特性String:字符串,使用一对 “” 引起来表示String s1 = “hello”;String s2 = new String(“hello”);String:声明为final的,不可被继承String 实现了Serializable接口:表示字符串是支持序列化的,实现了Comparable接口:表示String可以比较大小在JDK8以及之前,String内部定义了fin
2022-03-16 21:10:23 859
原创 Java-底层建筑-JVM-第5篇-方法区(Method-线程共享)
Java - 底层建筑 - JVM - 第9篇 - 方法区运行时数据区结构图栈、堆、方法区之间的交互关系从线程是否共享来看从创建对象的角度来看方法区的基本理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但是一些简单的实现可能不会选择区进行垃圾收集或者压缩”。但是对于HotSpot虚拟机而言,方法区还有个名字叫 Non-Heap(非堆),目的就是要和堆分开所以,方法区看作是一块独立于Java堆的内存空间方法区(Method Area
2022-03-02 21:44:54 1043
原创 Java-底层建筑-JVM-第4篇-堆(Heap-线程共享)
Java - 底层建筑 - JVM - 第8篇 - 堆概述每个进程拥有一个JVM实例一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域Java堆区在JVM启动的时候即被创建。其空间大小也就确定了。是JVM管理的最大的一块内存空间堆内存的大小是可以调节的《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但是在逻辑上他应该是连续的所有的线程共享Java堆,在这里还可以划分为线程私有缓冲区(Thread Local Allocation Buff
2022-03-02 21:28:10 679 1
原创 Java-底层建筑-JVM-第2篇-虚拟机栈 (线程私有)
Java - 底层建筑 - JVM - 第5篇 - 虚拟机栈虚拟机栈出现的背景由于跨平台的设计,Java指令都是根据栈来设计的。不同平台的CPU架构不同,所以不能设计为基于寄存器的优点是跨平台,指令集少,编译器容易实现,确定是性能下降,实现同样的功能需要更多的指令内存中的栈和堆栈是运行时的单位,而堆是存储的单位即:栈是解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的问题是数据存储的问题。即数据怎么放,放在哪儿虚拟机栈的基本内容Java虚拟机栈是什么?Java虚拟
2022-03-02 20:54:31 1498 2
原创 Volatile 详解图文结合
5. 共享模型之内存上一章讲解的 Monitor 主要关注的是访问共享变量时,保证临界区代码的原子性。这一章我们进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题5.1 Java 内存模型JMM 即 Java Memory Model,它从java层面定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受 cpu 缓存的影响有
2022-02-20 00:56:25 457 21
原创 Synchronized详解(Monitor,轻量级锁,偏向锁,锁膨胀,锁消除,自旋)
4.5 Monitor 概念synchronized的作用(1)原子性:所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。被synchronized修饰的类或对象的所有操作都是原子的,因为在执行操作之前必须先获得类或对象的锁,直到执行完才能释放。(2)可见性:可见性是指多个线程访问一个资源时,该资源的状态、值信息等对于其他线程都是可见的。 synchronized和volatile(后面文章会讲到)都具有可见性,其中synchronized对一个类
2022-02-18 15:43:30 862
原创 synchronized关键字的底层原理
????????博主主页:爪哇贡尘拾Miraitow????创作时间:????2022年2月8日 10:37????????内容介绍: synchronized关键字的底层原理????参考资料:gitee上面的文档⏳简言以励:列位看官,且将新火试新茶,诗酒趁年华????内容较多有问题希望能够不吝赐教???? ???? 欢迎点赞 ???? 收藏 ⭐留言 ???? synchronized原理 当我们使用synchronized关键字来修饰代码块时,字节码层面上是通过monitoren
2022-02-18 10:38:14 817
原创 从源码揭露ThreadLocal的不为人知的一面
ThreadLocal是什么从名字我们就可以看到ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量。从字面意思很容易理解,但是实际角度就没那么容易了,作为一个面试常问的点,使用场景也是很丰富。1、在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束。2、线程间数据隔离3、进行事务
2022-02-17 23:16:11 495 1
原创 【面试题】HashMap常见面试题-追魂17问
1. HashMap总览1.1 hashmap底层储存结构图解底层结构其实就是数组+链表+红黑树1.2 HashMap类定义先来看看HashMap的定义:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}从中我们可以了解到:HashMap<K,V>:HashMap是以key-value形式存
2022-02-08 22:13:18 1545 8
原创 Java-集合框架-哈希表-HashMap-源码分析
1.什么是Hash哈希:英文是Hash,也称为散列基本原理就是把任意长度输入,转化为固定长度输出这个映射的规则就是Hash算法,而原始数据映射的二进制串就是Hash值Hash的特点1.从Hash值不可以反向推导出原始数据2.输入数据的微小变化会得到完全不同的Hash值相同的数据一定可以得到相同的值3.哈希算法的执行效率要高效,长的文本也能快速计算Hash值4.Hash算法的冲突概率要由于Hash原理就是将输入空间映射成Hash空间,而Hash空间远远小于输入空间,根据抽屉原理,一定存在
2022-02-08 02:25:58 1575 19
原创 【面试题】常见面试题-java基础篇
JVM、JRE及JDK的关系JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。JRE( Java Runtime Environment)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。简单来说就是JDK是.
2022-02-07 19:36:56 1235 1
原创 Java类加载机制的几个个阶段,加载、验证、准备、解析、初始化【jvm】
类加载阶段1、加载概述:一个Java文件从编码完成到最终执行,一般主要包括两个过程:编译和运行,其中编译就是把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件,然后运行则是把编译声称的.class文件交给Java虚拟机(JVM)执行。而我们所说的类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。简单来说:加载指的是把class字节码文件从各个来源通过类加载器装载入内存中。举个通俗点的????:JVM
2022-01-12 12:31:14 3877 28
原创 JVM垃圾回收机制 (垃圾判断,垃圾回收算法,垃圾回收器,五种引用)【jvm】
????????博主主页:爪哇贡尘拾Miraitow????传作时间:????2022年1月9日 晚21:44????????????内容介绍:最近在学习JVM所以会时不时更新有关内容????参考资料:黑马JVM 度娘????参考链接:????JVM垃圾回收机制⏳简言以励:列位看官,且将新火试新茶,诗酒趁年华????内容较多有问题希望能够不吝赐教???? ???? 欢迎点赞 ???? 收藏 ⭐留言 ????????JVM垃圾回收 ♻1.1 如何判断对象可以回收♻1、 引用计数器法2、可达
2022-01-10 08:10:20 3938 75
原创 “三次握手,四次挥手“作为当代文明青年怎么能不会【计网】
TCP的介绍1、TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。2、客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。3、TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)首部固定部分各字段意义如下:源端口和目的端口 : .
2022-01-05 09:37:11 10641 82
原创 愿一切都那么简单 频分,时分,波分,码分以及四个随机访问介质访问控制协议【计网】
在数据的传输过程中,通常使用两种链路,分别是点对点链路,广播式链路。(1)点对点链路:指两个相邻节点通过一个链路相连,没有第三者。应用有PPP协议,常用于广域网。(2)广播式链路:指所有主机共享通信介质,类拟于公共的高速公路,应用有之前早期的总以太网、无线局域网、局域网。典型的拓扑结构:总线型、星型(逻辑总线型)。总线型:星型:信道划分介质访问控制信道划分介质访问控制:讲使用介质的每个设备于来自同一信道上的其他设备的通信隔离开,把时域和频域资源合理的分配给网络的设备简单来说就是是采
2022-01-02 15:52:06 4677 82
原创 redis 面试必问之缓存穿透,缓存击穿和缓存雪崩【redis】
缓存穿透与雪崩缓存穿透(查不到)概念在默认情况下,用户请求数据时,会先在缓存(Redis)中查找,若没找到即缓存未命中,再在数据库中进行查找,数量少可能问题不大,可是一旦大量的请求数据(例如秒杀场景)缓存都没有命中的话,就会全部转移到数据库上,造成数据库极大的压力,就有可能导致数据库崩溃。网络安全中也有人恶意使用这种手段进行攻击被称为洪水攻击。解决方案布隆过滤器布隆过滤器是一种数据结构,对所有可能的查询的参数以hash形式存储以便快速确定是否存在这个值,在控制层先进行拦截效验,不符合就
2021-12-10 08:52:42 721 43
原创 Linux RDB和AOF比较和选择策略【redis】
前言✍学习完前面的【????RDB】和【AOF????】我们就要思考AOF和RDB的选择以及一些对比让我们有更好的认识对比RDBAOF启动优先级低高体积小大恢复速度快慢数据安全性丢数据根据策略决定RDB优点:RDB快照是一个压缩过的非常紧凑的文件,保存着某个时间点的数据集,适合做数据的备份,灾难恢复;可以最大化Redis的的性能,在保存RDB文件,服务器进程只需要fork一个子进程来完成RDB文件的创建,父进程不需要做IO操作
2021-12-08 15:25:17 712 28
原创 Linux Redis发布与订阅【redis】
Redis发布与订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道订阅/发布消息图下图展示了频道 news.it以及订阅这个频道的三个客户端 —— 客户端A ,客户端B,和客户端C 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 news.it 时, 这个消息就会被发送给订阅它的三个客户端:命令这些命令被广泛用于构建即使通信应用,比如网络聊天室和实时广播,实时提醒等。
2021-12-07 21:24:40 602 2
原创 Linux 简单通俗理解Redis主从复制【redis】
Redis主从复制概念主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower), 数据的复制是单向的!只能由主节点复制到从节点(主节点以写为主、从节点以读为主)。默认情况下,每台Redis服务器都是主节点,一个主节点可以有0个或者多个从节点,但每个从节点只能有一个主节点。主从复制,读写分离!80%的情况都是在进行读操作!减缓服务器的压力!架构中经常使用!一主二从 主从复制作用
2021-12-06 17:52:27 1154 2
原创 Linux 持久化之AOF操作【redis】
前言✍可以先看往期的 【RDB????】快照功能(RDB)并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、以及未保存到快照中的那些数据。 从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化。什么是AOF如果要使用AOF,需要修改配置文件:appendonly no yes则表示启用AOF默认是不开启的,我们需要手动配置,然后重启redis,就可以生效了!将我们的命令都记录下来,hist
2021-12-05 21:11:22 1344 1
原创 Linux持久化之RDB操作【redis】
RedisRedis持久化( 面试和工作持久化都是重点)!!!Redis是内存数据库,如果不将内存中的数据库 状态保存到磁盘,那么一旦服务器进程退出,服务器的数据库状态也会消失所以Redis提供了持久化操作什么是RDB在指定时间间隔后,将内存中的数据集快照写入磁盘 ;也就是行话说到Snapshot快照,它恢复时候直接读取快照文件到内存,进行数据的恢复 ;Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束,再用这个临时文件替换上次持久化
2021-12-05 21:00:00 2116 2
原创 Linux BitMaps(位图)【redis】
BitMaps(位图)前言我们统计用户信息,比如csdn上面有统计粉丝的活跃度,或者在B站里面统计上线的人数,一般我们在QQ上面看到的没在线的用户头像就是灰色的,更简单的比如我们上班打卡这些两种状态的(不活跃,活跃,登录,未登录,打卡,未打卡等等)位存储使用位存储,信息状态只有 0 和 1比如我们要是存储一个用户一年的打卡情况,我们也就用内存365bit(用0表示未打卡,用1表示打卡),也就46个字节左右Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offse
2021-12-05 09:00:00 444
原创 Linux redis实现乐观锁(CAS)【redis事务】
事务前言:我们早在学习MySQL的时候就知道事务(ACID)就是所谓的(原子性(Atomicity)一致性(Consistency),隔离性(Isolation),持久性(Durability))原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。一致性(Consistency)事务前后数据的完整性必须保持一致。隔离性(Isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所
2021-12-04 20:09:36 1515
原创 简单实现邮件发送【springboot】
在之前学习javaweb阶段的邮件发送是相对繁琐的,可以看javaweb的实现 javaweb实现邮件发送到了springboot对代码进行了封装只需要几句代码就可以实现,发送者到被发送者这里写目录标题①首先看简单的邮件发送1.导入mail依赖2.先看源码重新回到MailSenderAutoConfiguration.java打开MailSenderJndiConfiguration.class怎样得到qq邮箱的明文密码1. 按照步骤打开邮箱简单的代码实现,发送文字1.测试2.效果图②完成复杂的邮.
2021-11-29 08:00:00 457 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人