自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 图解:Go Mutex

Mutex 可能处于两种不同的模式:正常模式和饥饿模式。在正常模式下,新来的G会尝试自旋获取锁,如果自旋获取失败,则会按照FIFO的顺序排队获取锁。当Mutex被释放,会唤醒等待队列中第一个等待者G,它需要和新来的 G们竞争Mutex的使用权。而新来的G会更有优势,它们已经在CPU上运行且它们的数量更多。因此一个刚被唤醒的等待者很大概率获取不到锁,在这种情况下,它会被放置到等待队列的队首。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xht5oJlA-167029119359

2022-12-06 09:47:59 437

原创 Go 源码阅读:sync.Pool

sync.Pool管理一组可以单独保存和检索的临时对象。目的是缓存已分配但未使用的对象,以供以后重用,从而减轻GC的压力。核心就是Put、Get和New。

2022-12-01 13:03:07 181

原创 Go Channel (底层实现逻辑)

Go Channel (底层实现逻辑)

2022-06-24 13:59:03 393

原创 Mongodb Ubuntu安装

1.更新软件源+导入MongoDB的GPG密钥2.安装mongodb3.为mongodb添加权限,否则有可能启动不了然后Mongodb重启4.启动mongodb服务。

2023-08-18 10:11:55 1025

原创 Golang 哈希表详解

​ 一个映射,也成为关联数组,其实是一个由唯一键组成的集合,而每个键必然关联一个特定的值。

2023-04-17 17:15:49 706 1

原创 什么是False Sharing

当存在一个int64数组长度为8,设此时cpu的L1缓存行大小为64B,则当core读取[0]时,会加载整个数组到缓存行,而当core读取[2]时,也会加载整个数组到缓存行,至此出现多个核心(线程)操作同一块内存,两者要不断的竞争该块内存的拥有权(修改),进而导致cpu速度降低。

2022-12-02 17:25:44 228

原创 Go语言逃逸分析

在C或C++语言中,当函数返回了一个栈上的对象指针,在函数执行完成,栈被销毁 后,继续访问被销毁栈上的对象指针,导致出现问题。Go语言能够通 过编译时的逃逸分析识别这种问题,自动将该变量放置到堆区,并借 助Go运行时的垃圾回收机制自动释放内存。编译 器会尽可能地将变量放置到栈中,因为栈中的对象随着函数调用结束 会被自动销毁,减轻运行时分配和垃圾回收的负担。在Go语言中不管是字符串、 数组字面量,还是通过new、make标识符创建的对象,都既可能被分配 到栈中,也可能被分配到堆中。

2022-10-20 14:20:40 210

原创 Go中main.main的启动流程:一图流

Go中main.main的启动流程

2022-10-18 14:26:23 183

原创 Redis 底层数据结构

因为这本书写的太好了,所以本文仅作简要概述。

2022-10-18 14:16:15 231

翻译 gRPC(官方文档翻译)

ProtoBuf 作为gRPC的接口定义语言(IDL)和底层消息交换格式。在gRPC中客户端应用程序可以志杰调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使我们更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。在服务端,服务端实现这个接口并运行一个gRPC服务器来处理客户端调用。在客户端,客户端有一个存根(某些语言中称为客户机),它提供与服务器相同的方法。

2022-10-08 09:52:09 735

原创 Go Slice的扩容机制

Go Slice的扩容机制

2022-06-23 14:57:46 1730

原创 Go Slice 与 Array的区别

Slice 与 Array的区别 GOLang

2022-06-23 13:32:41 256

原创 GO语言接口数据结构

接口接口的底层结构runtime\runtime2.go.iface 是带方法签名的接口在运行时的具体结构// 是带方法签名的接口在运行时的具体结构type iface struct { // 存储接口的类型、动态数据类型、动态数据类型的函数指针 《重点》 tab *itab // 存储了接口中动态类型的函数指针 data unsafe.Pointer}接口底层结构的完整图像type itab struct { inter *interfacetype //

2022-04-24 10:18:25 611

原创 Redis 数据结构之SDS

1. 简单的动态字符串Redis 没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组)SDS的数据结构struct sdshdr { // 记录buf数组中已使用字节的数量,等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];};图示:不带有未使用空间的SDS带有未使用空间的SDS作用:获取

2022-04-17 18:44:39 747

原创 Go语言源码阅怎么看?

源码阅读引言本文记录笔者近期学习Go底层源码时所涉及到的部分笔记,在此记录以供自己复习使用。未完待续。。文章目录源码阅读引言栈分配内存的阈值通道的底层结构体接口的底层结构体切片的底层结构体Map的底层结构体G调度函数GMP底层结构体互斥锁结构体栈分配内存的阈值cmd/compile/internal/ir/cfg.go 改文件定义了非逃逸的情况下栈上分配内存的阈值// 定义显示声明的变量,在栈上能分配的最大容量(10MB),若大于该值,显示变量将被分配在堆上// maximum size v

2022-03-31 22:45:13 923 1

原创 Go Array

Array 数组1.初始化存储结构编译期间的数组类型:type Array struct { Elem *Type // element type Bound int64 // number of elements; <0 if unknown yet}由cmd/compile/internal/types.NewArray 函数生成的,该类型包含两个字段,分别是元素类型 Elem 和数组的大小 Bound,这两个字段共同构成了数组类型,而当前数组是否应该在堆栈中初始化也在编译期就

2022-03-27 09:03:36 286

原创 Java 保姆级教程——3.添加地图,地图根据人物移动

Java 保姆级教程——3.添加地图,地图根据人物移动注:经过上期的学习,我们学习了如何创建JFrame窗体、如何添加监听事件。根据大家给我的反馈,这一期给大家讲述:如何添加地图、地图如何根据人物移动。准备阶段为了更直观的讲解,我们先看看我今晚写的小案例(为了更好的理解,大家要看过之后再浏览后续文章,闪烁问题使用双缓冲即可解决,我这里仅为演示,暂且没有写)1.首先,我们需要了解几个概念1.如何将自己的游戏合理的拆解成多个类?答:1.首先,分析我们这个小案例都有哪些部分组成:(我这里直接将程序

2022-03-19 21:22:06 6133 1

原创 java保姆级教程—— 2.Java GUI

java保姆级教程—— 2.Java GUI注:通过上篇文章,我们了解到游戏的一些基础概念,下面学习如何使用Java写游戏。上篇链接:文档:1.什么是游戏.note1.java中AWT(Frame)和SWing(JFrame)的区别与联系:简单来讲就是AWT为早期的Java GUI包,功能不是很健全,Swing是对AWT的升级版,提供了更加丰富的功能。如有兴趣可点击链接查看具体区别与联系(了解)具体区别与联系——后续教程均使用(Swing)JFrame2.使用java制作游戏的前言说白了

2022-03-19 21:07:57 4543

原创 java保姆级教程—— 1.什么是游戏

引言: Java保姆级教程是笔者在暑假时,为学弟们准备的java游戏教程,今天整理了一下,共享给网友们,笔者也是学生,若有大神发现文中存在误区,还请私信笔者。注:java游戏保姆级教程,正在制作中,目前只出了一期,由于咱们春节活动较多,后续会在在春节过后再进行快速更新。-—— zwk什么是游戏?一个游戏首先要具备以下三条1、规则:游戏之所以是游戏是因为有规则(怎么玩、怎么赢、怎么通关)2、目的:一个清晰的胜负目标(如何赢?为什么要赢?)3、升级:可以学习的升级技巧(如何才能更快、得到高分、顺利

2022-03-19 20:55:42 5010

原创 Go 1.18 新特性尝鲜:泛型

Go 1.18 新特性尝鲜:泛型文章目录Go 1.18 新特性尝鲜:泛型引言GO 中泛型的语法泛型使用基本使用指定类型参数调用通过interfac进行类型约束引言GO 团队在今天发布了 go 1.18 的正式版,今天我们就GO的新特性:泛型 进行简单的尝鲜使用。GO 中泛型涉及到两个关键词:类型参数、类型约束GO 中泛型的语法以下示例中 [] 类型参数type0、type2,其中type0受可比较类型约束 ,type1 受 int64 或 float64 类型约束。func funcName[

2022-03-16 10:31:32 408

原创 Go源代码编译运行(Window环境)

Go源代码编译运行(Window环境)文章目录Go源代码编译运行(Window环境)1.gcc安装1.1gcc下载1.2gcc安装2.Go源码安装2.1下载Go源代码2.2注意事项2.3安装完1.4后2.4安装Go源码3.修改Go源码并调用3.1修改源代码3.2 编写GO代码调用`fmt.Println`函数3.3 使用编译后的源代码启动go文件1.gcc安装1.1gcc下载根据自己的系统选择gcc下载,笔者的系统为win10 64位 选择了x86_64-posix-sehMinGW-w64 -

2022-02-15 22:23:06 4456

原创 Go调用Plan9汇编代码

Go调用Plan9汇编代码1.目录详情注意.s汇编文件要与Go文件名称相同2.Go文件package mainimport "fmt"// 该add函数声明定义在同一个 package name 下的任意 .go文件中// 只有函数头,没有实现func add(a, b int) intfunc main() { fmt.Println(add(10, 11))}3.汇编文件(xx.s)#include "textflag.h"// func add(a, b int)

2022-02-15 21:56:51 317

原创 IDEA 集成配置 Jad

Idea jad

2022-01-12 09:33:21 1381

原创 Spring Security 认证授权

Spring Security 认证授权1. 基本概念1.1 什么是认证​ **认证(what):**认证就是判断一个用户身份是否合法的过程。当用户某项资源时,需要验证他的身份信息,身份合法能够访问资源,身份不合法不允许访问资源。​ **为什么需要认证(Why)????*认证的必要性存在于两个方面,其一:保护用户的数据、隐私安全;其二:保护服务器减少被攻击的概率。​ **认证的方式(Who):**账号密码认证,指纹认证,手机短信认证,人脸认证。1.2 什么是会话​ **会话:**

2021-11-21 14:04:24 3063

原创 项目总结

项目总结1.为什么修修补补的时间约为编码时间的1.5倍一个完整的软件开发周期需求分析(requirements analysis)设计(design)编码(coding)测试(testing)部署和评估(deployment / evaluation)就以上开发周进行期逐个分析需求分析需求分析,按照甲方给定的需求,结合自己部门的前台框架结构,绘制原型图。有了原型图再去做需求分析,前后端交流,就变得十分便利了。如果使用框架,前后端开发人员就有义务在分析需求时,结合对框架的熟悉,对于

2021-09-16 16:57:04 73 1

原创 Redis——Linux下源码安装Redis

Redis——Redis安装1. Linux 源码安装Redis1.1 复制官网Redis下载链接1.2 Ubuntu安装 wget安装命令:sudo apt-get install wget1.3 wget下载通过 wget 使用官网的下载链接下载redis 或者使用github链接Releases · redis/redis (github.com)官网链接下载wget https://download.redis.io/releases/redis-6.2.5.tar.gz

2021-08-03 14:20:35 295

原创 Windows 安装内置 linux

Windows 安装内置linux1.下载下载方式有两种微软商店获取自行下载安装包1.1 通过Microsoft Store下载安装搜索ubuntu挑选想用的发行版本1.2 自行下载安装包**优点:**可以自行选择安装目录下载链接:Manually download Windows Subsystem for Linux (WSL) Distros | Microsoft Docs2.以下是手动安装需要注意的2.1 启用适用于 Linux 的 Windows 子系统term

2021-08-03 11:41:10 419

原创 MyBatis-Plus 使用分页查询, Total 和 Pages 都是0 ——Mybatis-Plus 常见问题(二)

2.MyBatis-Plus 使用分页查询, Total 和 Pages 都是0可能的原因:原因1:声明Page对象时将 isSearchCount 参数设为了false如下:Page<ExampleUser> page = new Page<>(1, 3, false);解决方法:将 isSearchCount 参数设为了true 表示查询总量**注意:**此操作会导致每次查询两条sql语句Page<ExampleUser> page = new Pag

2021-07-26 20:02:43 4055

原创 mybatis-plus报错解决Invalid bound statement (not found)错误——Mybatis-Plus 常见问题(一)

1.MyBatis-Plus 无法使用 resources 目录下的 *Mpper.xmlmybatis-plus报错解决Invalid bound statement (not found)错误项目结构:报错原因:mapper目录下的ExampleUserMapper无法绑定resource/mapper/sys/ExampleUserMapper.xml解决方案1:**检查代码是否存在 调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFact

2021-07-26 19:44:24 522 1

原创 Mybatis-Plus

MyBatis-Plus引言:因为 MyBatis-Plus 有中文文档,故该笔记只记录部分知识汇总。注解部分1.@TableNamemybatis-plus 默认开启驼峰命名转换即:数据库表名或字段名单词之间以_隔开,Java中以驼峰命名规则例子:数据库字段:user_id 会自动映射为 Java 实体属性 userId# 开启驼峰命名转换mybatis-plus.configuration.map-underscore-to-camel-case=true那么当存在数据库字段与 J

2021-07-24 20:04:11 320

原创 Spring boot 添加 自定义Listener (监听器)

Spring boot 添加 自定义Listener (监听器)自定义监听器需要实现以下监听器接口中的其中一个Spring MVC 内置的监听器ServletContextListenerServletContextAttributeListenerServletRequestListenerServletRequestAttributeListenerHttpSessionListenerHttpSessionAttributeListener注册自定义监听器的三种方式直接创建自

2021-06-11 10:57:28 2496

原创 Spring Boot 自定义过滤器(Filter)

Spring Boot 自定义过滤器(Filter)Filter 过滤器主要是用来过滤用户请求的,它允许我们对用户请求进行前置处理和后置处理,比如实现 URL 级别的权限控制、过滤非法请求等等。Filter 过滤器是面向切面编程——AOP 的具体实现(AOP切面编程只是一种编程思想而已)。自定义 Filter 只需要实现 import javax.servlet.Filter 接口即可。Filter 接口依赖于 Servlet 容器,Filter 接口就在 Servlet 包下,属于 Servlet

2021-06-10 16:41:22 2445

原创 Spring Boot 对 跨源(域)资源共享 的支持(CORS)

Spring Boot 对跨源(域)资源共享的支持(CORS)首先,什么是跨域资源?跨源资源共享(CORS) (或通俗地译为跨域资源共享) 是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他 origin(域,协议,端口),这样浏览器就可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否辉允许要发送的真是请求,该机制通过浏览器发起一个服务器托管的跨源资源的预检请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。例子: 运行在 http:/

2021-06-04 22:14:25 279

原创 Spring Boot 国际化(Internationalization)

Spring Boot 国际化(Internationalization)springboot支持本地化消息,这样应用程序就可以满足不同语言偏好的用户。默认情况下,springboot会在类路径的根目录下查找消息资源包。当配置的资源束的默认属性文件可用时(即默认情况下为messages.properties),自动配置将应用。如果资源包仅包含特定于语言的属性文件,则需要添加默认值。如果找不到与任何配置的基名称匹配的属性文件,则不会自动配置MessageSource。可以使用spring.message

2021-06-04 09:09:23 387

原创 Spring Boot ContentNegotiation 内容协商

ContentNegotiation 内容协商作用当我们访问一个 Controller 时返回值一般都采用 RESTful 风格 也就是返回 json 格式,内容格式可以为同一个 Url 返回多种不同的结果,如 xml 等。Spring-Boot 默认禁止后缀匹配模式通过指定返回值类型获取指定类型的返回值使用根据例子来感受一下新建一个Controller@RestControllerpublic class TestContentNegotiation { @GetMapping(

2021-06-04 08:47:01 497

原创 Spring Boot 自定义错误(404.html)页面

Spring Boot 自定义错误(404.html)页面使用SpringBoot的自动配置原理进行异常处理SpringBoot自动配置了一个类ErrorMvcAutoConfiguration来处理处理异常,有兴趣的可以去看一下,然后在这个类中定义一个错误的BasicErrorController类,主要代码有如下:@Controller@RequestMapping({"${server.error.path:${error.path:/error}}"})public class Basic

2021-06-03 22:56:40 25880 1

原创 MySQL导出数据到C盘目录时出现(OS errno 13 - Permission denied)异常的解决方案

一、异常:1 - Can't create/write to file 'C:\Users\userNmae\Desktop\outfile.xls' (OS errno 13 - Permission denied)二、异常分析:显而易见,无法在C盘的某个目录创建文件 系统 权限被拒绝三、场景:今天在使用导出语句导出数据表时,出现了该异常。ELECT * FROM table_name INTO OUTFILE 'path_name'解决:打开服务-> 右键-&g.

2021-01-16 13:10:40 5362 2

原创 MySQL 的create table as 与like 的使用

1.MySQL复制相同表结构的方法:-- 1.使用AS复制相同的表结构 CREATE TABLE table_name AS SELECT * FROM other_table WHERE 1=2;(或者LIMIT 0) -- 2.使用LIKE复制相同的表结构 CREATE TABLE table_name LIKE other_table;2.复制表的数据复制全部数据 注意:复制全部数据 列的类型要相同 INSERT INTO table_name SELECT * FROM

2021-01-15 15:03:56 21630 1

原创 mysql 设置数据库&表的字符集

1.查看指定库的字符集SHOW CREATE DATABASE learn;修改库的字符集1.alter database 库名 default character set 字符集; 2.alter database learn character set utf82.查看表中每个字段的字符集show full fields from table_name;修改表中编码为utf8,表中的字符类型字段会自动跟随表的编码alter table table_name con

2021-01-12 16:44:29 2449

原创 MySQL 实现delete后 自增长id进行重新排序

一、首先给出解决方案1,删除原有主键:ALTER TABLE `table_name` DROP `id`;2,添加新主键字段: ALTER TABLE `table_name` ADD `id` int NOT NULL FIRST; 3,设置新主键: ALTER TABLE `table_name` MODIFY COLUMN `id` int NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);二、执行每段sql语句时 数据表发生的变化1

2021-01-11 22:52:27 3483 1

空空如也

空空如也

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

TA关注的人

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