• 博客(59)
  • 收藏
  • 关注

原创 『操作系统』经典同步互斥问题

问题描述:一个生产者和一个消费者共享一个初始为空、大小为 n 的缓冲区,缓冲区不满时生产者才可以投递消息,缓冲区不空时消费者才能消费数据。

2022-06-29 23:33:18 1011 1

原创 『计组』CPU 如何区分指令和数据

我们知道指令和数据都是以二进制存储在主存储器中,那么 CPU 访问地址空间时,怎么知道这条地址是指令还是数据呢?

2022-06-26 13:01:47 3086 1

原创 『墨菲安全』10 分钟对心爱的 GitLab 代码仓库来一次全量体检

文章目录方案调研方案一(放弃)方案二(成功)脚本流程增量检测GitLab 配置项目地址去年 log4j 漏洞爆发时候就已经很痛苦了,当时把所有的线上服务排查了一遍。没想到这都已经过去3个月了,上周又遇到了一个服务仍在使用低版本,被外部攻击,有点受伤。这件事后,老板让我全量扫一遍我们的代码库,看还有哪些服务还在用老版本的 log4j,统一推一波修复,防止后续在发生此类事件。方案调研方案一(放弃)当时我第一反应是写个脚本,遍历所有项目,再拉取项目到本地,通过正则匹配的方式识别代码中是否使用了 log

2022-04-01 15:28:34 3292 2

原创 『Redis』常见应用问题 - 分布式锁

文章目录一、分布式锁1.1 问题描述1.2 Redis 实现分布式锁一、分布式锁1.1 问题描述分布式系统中多线程、多进程分配在不同的机器上,使得单机并发锁策略失效。单纯的 Java API 不能提供分布式锁的能力。需要一种跨 JVM 互斥机制来控制共享资源的访问。分布式锁主流方案:数据库缓存 (性能最高)Zookeeper (可靠性最高)1.2 Redis 实现分布式锁1、设置锁和过期时间set age 18 nx ex 60当设置 age 后,其他线程来了只能等待锁释放

2022-03-02 20:04:43 770

原创 『Redis』常见应用问题 - 缓存穿透、击穿、雪崩

文章目录一、缓存穿透1.1 概念1.2 具体表现1.3 解决方案二、缓存击穿2.1 概念2.2 具体表现2.3 解决方案三、缓存雪崩3.1 概念3.2 具体表现3.3 解决方案一、缓存穿透1.1 概念在 Redis 中查询不到数据,大量请求直达数据库,导致数据库宕机。1.2 具体表现应用服务器压力过大Redis 命中率降低一直查询数据库1.3 解决方案空值缓存查询数据为空(不管数据存不存在),对空结果(null)缓存并设置过期时间。白名单bitmaps 定义一个白名单,id

2022-03-02 17:59:00 319

原创 『Redis』 事务和锁机制

文章目录一、事务1.1 Multi、Exec、Discard1.2 事务错误处理1.3 事务冲突(乐观锁、悲观锁)1.4 事务三特性1.5 模拟秒杀案例1.5.1 超售、超时问题一、事务Redis 事务是隔离操作,所有命令都会序列化 、顺序执行,不会被其他客户端发送的命令打断。主要作用:串联多个命令,防止插队。1.1 Multi、Exec、Discard首先输入 Multi 命令开启事务,所有命令都会进入队列且不执行(组队阶段),直到输入 Exec 后命令依次执行(运行阶段)。组队阶段可通过 d

2022-03-02 17:10:02 813

原创 『脚手架』方糖工具箱 | 一款采用 SpringCloud 微服务架构的脚手架

文章目录????欢迎 Fork 和 Star????SugarTools????如何部署????️包含组件????正在开发中????贡献代码的步骤????欢迎 Fork 和 Star项目地址:https://github.com/xingly-cn/SugarTools请您小手点个Star。????SugarTools方糖工具箱,一款采用 SpringCloud 微服务架构的小巧工具箱,遵循不重复造轮子的原则,每个模块相互独立可直接实现到自己的项目中。目前很多功能处于开发中,有 Bug 或不去

2022-02-06 00:20:25 20776

原创 『Bug记录』Vue 路由渲染同一组件生命周期导致的 Bug

『Bug记录』Vue 路由渲染同一组件生命周期导致的 Bug

2022-01-15 21:20:12 392

原创 『Java面经』Java 自增变量

文章目录自增变量栈分析微信关注『方糖算法』自增变量看下面一段代码,计算出 i,j,k 分别为多少?// Type your code here, or load an example.void increase() { int i = 1; i = i++; int j = i++; int k = i + ++i * i++;}为了更好的理解,下面附上汇编代码,按照行号分段好了。 mov DWORD PTR [rbp-4], 1

2022-01-13 16:25:36 392

原创 『玩转 Es 引擎』Elasticsearch 入门

文章目录RESTFul 访问索引操作文档操作查询操作Java API 访问环境配置RESTFul 访问索引操作一切操作遵从 RESTFul 风格。1、创建索引发送 PUT 请求:http://127.0.0.1:9200/索引名称2、查看索引指定:发送 GET 请求:http://127.0.0.1:9200/索引名称全部:发送 GET 请求:http://127.0.0.1:9200/_cat/indices?v3、删除索引发送 DELETE 请求:http://127.0.0.1:9

2022-01-09 19:28:14 1159

原创 『Bug记录』 SpringBoot 如何连接腾讯 Es 服务器 [IOException]

文章目录问题溯源问题排查问题溯源最近需要使用 ES 服务器,就买了一台。根据开发文档描述,发现咋都连接失败。package com.sugar.es;import org.apache.http.HttpHost;import org.apache.http.auth.AuthScope;import org.apache.http.auth.Credentials;import org.apache.http.auth.UsernamePasswordCredentials;impor

2022-01-08 23:02:12 1336

原创 『玩转 Netty』Netty 模型

文章目录三、Netty3.1 原生 NIO 存在的问题3.2 线程模型3.3 Netty 模型3.4 入门实例3.5 taskQueue 自定义任务3.6 异步模型原理3.7 HTTP 服务案例3.8 Netty 核心模块3.9 Pipline 组件3.10 进阶实例3.11 心跳检测3.12 WebSocket 长连接三、Netty3.1 原生 NIO 存在的问题1、NIO 库和 API 复杂,使用麻烦。2、需要具备 Java 多线程,网络编程能力。3、开发工总量大,难度大;断线重连,网络拥塞控

2021-12-31 12:23:19 758

原创 『玩转 Netty』NIO 网络模型

文章目录二、NIO 模型2.1 介绍2.2 工作机制2.3 NIO 三大核心原理2.4 Buffer 使用2.5 Channel 案例2.6 Selector(多路复用器)2.7 NIO 与 BIO 比较2.8 NIO 案例2.9 NIO 零拷贝二、NIO 模型2.1 介绍NIO 包括三大核心 [Channel,Buffer,Selector]。面向缓冲区、块编程,数据读入缓存区,需要时在缓冲区中移动,增加处理灵活性,是同步非阻塞的高伸缩性网络。2.2 工作机制1、一个线程从通道发送请求或读取数据

2021-12-25 13:42:12 1069

原创 『玩转 Netty』BIO 网络模型

文章目录一、BIO 模型1.1 介绍1.2 工作机制1.3 BIO 实例1.4 BIO 问题分析一、BIO 模型1.1 介绍传统的 IO 编程。同步阻塞一个连接对应一个线程,只要有客户端请求就得启动一个线程,尽管这个连接不操作,线程也依旧存在,造成资源浪费,可通过线程池改善,适用于连接数较少且固定的架构。1.2 工作机制1、服务器启动一个 ServerSocket。2、客户端启动 Socket 对服务器进行通信,默认服务器与每个客户建立一个线程。3、客户端发出请求,询问服务器有无线程响应,没有

2021-12-25 13:40:54 639

原创 『设计模式』创建型设计模式

文章目录1、简单工厂模式1.1 介绍1.2 缺点1.3 优点二、工厂方法模式2.1 介绍2.2 优点2.3 缺点三、抽象工厂模式3.1 介绍3.11 产品族3.2 优点3.3 缺点四、单例模式4.1 介绍4.2 饿汉式单例与懒汉式单例4.21 饿汉式单例4.22 懒汉式单例与双重检查锁定4.23 区别4.24 静态内部类实现单例模式4.3 优点4.4 缺点1、简单工厂模式1.1 介绍简单工厂模式有三个角色,工厂类根据参数不同创建不同的实例,实例具有共同的父类。1.2 缺点1、创建产品对象,需要

2021-12-17 22:06:20 538

原创 Java 任务调度框架 Quartz

文章目录1、Quartz1.1 引入依赖1.2 入门案例1.3 Job 与 JobDetail1.4 JobExecutionContext1.5 JobDataMap1.6 Job 状态1.7 Trigger1.8 SimpleTripper1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifac

2021-12-13 23:44:07 809

原创 Spring AOP——Spring 中面向切面编程

文章目录一、AOP——另一种编程思想1.1 什么是 AOP1.2 为什么需要 AOP1.3 AOP 实现分类二、AOP 术语三、初步认识 Spring AOP3.1 Spring AOP 的特点3.2 Spring AOP 的简单例子四、通过注解配置 Spring AOP4.1 通过注解声明切点指示器4.2 通过注解声明 5 种通知类型4.3 通过注解声明切点表达式4.4 通过注解处理通知中的参数4.5 通过注解配置织入的方式六、总结前几天学习 《Spring实战》 这本书,记录一下 Spring 中的

2021-12-01 23:30:17 2238

原创 『Bug记录』JavaMailSender 注入失败,空指针异常的解决

文章目录问题溯源问题排查最近有个需求,用户评论邮件通知我,然后使用 JavaMailSender。由于在 properties 中配置了 mail ,这里直接注入 JavaMailSender 。问题溯源package com.sugar.wxblog.utils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.mail.Mai

2021-11-30 21:19:09 4066

原创 Spring Bean对象注入静态变量

文章目录问题解决办法问题如果直接把 Bean 对象注入到静态变量会报空指针。 @Autowired private static JedisPool jedisPool;解决办法且在工具类中加上 @Component 注解。 private static JedisPool jedisPool; @Autowired public void setJedisPool(JedisPool jedisPool) { JedisUtil.jedisPool = j

2021-11-26 19:44:53 982

原创 『机器学习』了解分类,回归,聚类算法,实现小规模预测

文章目录1、SkLearn 数据库鸢尾花数据集数据集划分2、特征提取字典提取文本提取3、特征预处理归一化标准化4、特征降维特征选择Fitter(过滤式)Embedded(嵌入式)5、实战分析探究用户对物品类别的喜好6、SkLearn 转换估计器转换器估计器7、KNN算法原理分析实战总结8、模型选择与调优交叉验证超参数搜索 - 网格搜索实战分析1、SkLearn 数据库鸢尾花数据集'Sklearn 数据集使用' iris = load_iris()数据集划分'划分数据集' x_train

2021-11-20 16:11:24 1760

原创 『机器学习』Matplotlib 入门指南

文章目录基本用法Figure图像坐标轴设置Legend图例Annotation标注Tick 能见度Scatter散点图Bar柱状图Contours等高线图Image图片3D 数据Subplot 多合一Subplot 分格显示Animation动画微信关注『方糖算法』基本用法import matplotlib.pyplot as pltimport numpy as np# 横坐标 [-1,1] 划分 50 个x = np.linspace(-1,1,50)y = 2 * x + 1plt

2021-11-19 20:53:11 2213

原创 『剑指Offer』64. 求1+2+…+n

文章目录题目思路代码题目思路递归求和,不给用 if 很无语。。。代码class Solution {public: int sumNums(int n) { n > 0 && (n += sumNums(n-1)); return n; }};

2021-11-15 20:10:07 514

原创 『剑指Offer』54. 二叉搜索树的第k大节点

文章目录题目思路代码题目思路遍历树 val 放入 vector ,然后排序输出第 K 大。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class S

2021-11-15 19:59:10 1042

原创 『剑指Offer』40. 最小的k个数

文章目录题目思路代码题目思路排序,取范围代码class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { sort(begin(arr),end(arr)); vector<int> res(begin(arr),begin(arr) + k); return res; }};...

2021-11-14 12:13:50 863

原创 『剑指Offer』58 - I. 翻转单词顺序

文章目录题目思路代码题目思路用栈把每个单词存入,在挨个输出。代码class Solution {public: string reverseWords(string s) { string res = "",temp = ""; int i = 0; stack<string> t; for(i=0 ; i < s.size() ; i++){ if (s[i] == ' ') {

2021-11-09 23:22:20 4412

原创 『剑指Offer』57. 和为s的两个数字

文章目录题目思路代码题目思路双指针思想。代码func twoSum(nums []int, target int) (res []int) { i, j := 0, len(nums) - 1 for i < j { if nums[i] + nums[j] == target { res = append(res, nums[i]) res = append(res, nums[j])

2021-11-09 23:13:31 226

原创 『剑指Offer』21. 调整数组顺序使奇数位于偶数前面

文章目录题目思路代码题目思路没啥好思路,暴力吧。代码class Solution {public: vector<int> exchange(vector<int>& nums) { vector<int> res; for (auto i : nums) if (i & 1) res.push_back(i); for (auto i : nums) if (i % 2 == 0) r

2021-11-09 23:08:47 4536

原创 『剑指Offer』 25. 合并两个排序的链表

文章目录题目思路代码题目思路创建哑结点,不采用创建新节点方式,直接在原地修改。最后判断 l1 或 l2 哪个不为空,直接将哑结点连接上去。代码/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ //1-3-5-7-9,2-4-6func mergeTwoLists(l1 *ListNode, l2 *ListNod

2021-11-08 20:35:39 235

原创 『剑指Offer』52. 两个链表的第一个公共节点

文章目录题目思路代码题目思路遍历 headA 记录节点信息,遍历 headB 发现节点出现在 headA中,找到。代码/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func getIntersectionNode(headA, headB *ListNode) *ListNode { q := map[*Li

2021-11-08 20:22:35 356

原创 『剑指Offer』22. 链表中倒数第k个节点

文章目录题目思路代码题目思路快慢指针先让快指针先走 k 个节点,然后 root 和 cur 节点一起后移,当 cur 到到达尾部时 root 刚好指向倒数第 k 个节点。代码/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func getKthFromEnd(head *ListNode, k int) *ListN

2021-11-07 21:23:58 257

原创 『剑指Offer』18. 删除链表的节点

文章目录题目![在这里插入图片描述](https://img-blog.csdnimg.cn/be0c439130b04fe5ae707a3ec5cce17f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5p6a5pa557OW,size_20,color_FFFFFF,t_70,g_se,x_16)思路代码题目思路写多了,没啥思路,直接删。代码/** * De

2021-11-07 21:18:59 233

原创 Go进阶 JWT RESTful身份认证教程

文章目录1、什么是 JWT ?2、JWT 组成3、JS 中提取JWT字符串荷载信息4、Gin 框架实现 JWT 用户认证4.15、6、1、什么是 JWT ?JWT(JSON Web Token)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。JWT 由三部分组成 [Header,Claims,Signature] 。它将用户信息加密到 token 里,服务器不保存任何用户信息,服务器通过自定义的密钥验证 token 的正确性。2、JWT 组成Heade

2021-11-06 16:29:46 505

原创 『剑指Offer』Offer 47. 礼物的最大价值

文章目录题目思路代码题目思路代码func maxValue(dp [][]int) int { n, m := len(dp), len(dp[0]) // 边界 for i := 1 ; i < m ; i++ { dp[0][i] = dp[0][i - 1] + dp[0][i] } for i := 1 ; i < n ; i++ { dp[i][0] = dp[i - 1][0] + dp[i][0]

2021-11-05 15:15:57 247

原创 『剑指Offer』 42. 连续子数组的最大和

文章目录题目思路代码题目思路这里使用的是 在线处理,只要 t > 0 那就一直累加,并更新最大值 res。一旦 t <= 0,那就把 t 更新成当前累加的值。代码class Solution {public: int maxSubArray(vector<int>& nums) { int n = size(nums), t = 0, res = INT_MIN; for(auto i : nums) {

2021-11-05 15:01:48 3001

原创 Vue 中使用 localStorage 详解

文章目录1、什么是 localStorage ?2、使用方法2.1 保存2.2 获取2.3 删除3、案例展示1、什么是 localStorage ?使用 Web Storage 存储键值对比存储 Cookie 方式更直观,而且容量更大,它包含两种:localStorage 和 sessionStorage :sessionStorage临时存储,为每一个数据源维持一个存储区域,在浏览器打开期间存在,包括页面重新加载。localStorage长期存储,与 sessionStorage 一样

2021-11-04 22:55:15 23892 3

原创 『剑指Offer』63. 股票的最大利润

文章目录题目思路代码题目思路枚举每个元素,在这个元素右边找与它差值最大的。更新最大差值 res代码暴力版本func maxProfit(prices []int) (res int) { for i := 0 ; i < len(prices) ; i++{ for j := i + 1 ; j < len(prices) ; j++ { res = max(res, prices[j] - prices[i]) }

2021-11-04 19:52:54 254

原创 『剑指Offer』10- II. 青蛙跳台阶问题

文章目录题目思路代码题目思路与上一题斐波那契状态转移方程相同,只是初始条件不同 dp[0] = 1; dp[1] = 1; dp[2] = 2 。代码func numWays(n int) int { const p = 1e9 + 7 dp := [101]int{1,1,2} for i := 2 ; i <= n ; i++ { dp[i] = dp[i - 1] % p + dp[i - 2] % p } return dp[

2021-11-04 17:15:17 196

原创 『剑指Offer』 I. 斐波那契数列

文章目录题目思路代码题目思路动态规划,初始条件 dp[0] = 0; dp[1] = 1 ,状态转移方程 dp[i] = dp[i-1] + dp[i-2] 。代码func fib(n int) int { const p = 1e9+7 dp := [101]int{0,1} for i := 2 ; i <= n ; i++ { dp[i] = dp[i - 1] % p + dp[i - 2] % p } return dp[n

2021-11-04 16:56:16 134

原创 『剑指Offer』27. 二叉树的镜像

文章目录题目思路代码题目思路l := mirrorTree(root.Left)r := mirrorTree(root.Right)l 和 r 的输出结果为:[9,6]、[3,1]、[7,2] 对应每个节点的左右子节点1、每次遍历获取到当前节点 root 的左右子节点 A 和 B2、再让 root.Left = B ,root.Right = A,使得每个节点下面的左右子节点完成交换代码func mirrorTree(root *TreeNode) *TreeNode {

2021-11-03 15:31:01 124

原创 『剑指Offer』28. 对称的二叉树

文章目录题目思路代码题目思路1、首先对 root 为空和 root 左右子节点不同 判 False2、其次我们将 root 的左右子树看成两个树 使用 isTrue 进行判断3、遍历子树 A 和 B 是否完全相同,这里注意 A.Left 与 B.Right 对应,满足对称性。代码/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode *

2021-11-03 15:03:54 154

空空如也

空空如也

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

TA关注的人

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