- 博客(108)
- 收藏
- 关注
原创 一篇文章教你如何设计权限控制系统——RBAC模型详解
RBAC模型是一种将用户与权限通过角色进行关联的权限管理机制。在这种模型中,权限不是直接分配给用户,而是分配给角色,用户通过拥有角色来间接获得权限。这种间接的权限分配方式简化了权限管理,提高了系统的安全性和灵活性。那为什么需要角色这个概念呢?
2024-09-09 19:13:13
983
原创 Go语言原子操作—atomic
在日常开发中,不可避免的会碰到并发场景,在Go语言中处理同步的方法通常是使用锁,但如果是对单一的一个整数操作,这个时候使用锁可能会造成更大的性能开销,而且代码也失去了美观与优雅。这个时候我们可以使用Go语言自带的原子操作,原子操作在Go语言的sync/atomic标准库里面,原子操作是比其他同步技术更基础的一种技术,而且原子操作是无锁的,通常是直接通过CPU指令实现。如果去看其他同步技术的源码可以看到很多技术都是依赖于原子操作的。
2024-09-02 11:48:56
1056
原创 Go语言反射的基础使用
在计算机科学中,反射(Reflection)是一种能力,允许程序在运行时检查、修改和使用其自身的结构和行为。这通常包括获取类型信息、访问对象的属性和方法,以及在运行时动态调用方法。
2024-08-24 12:43:49
1181
1
原创 Go语言Time包的使用
Go语言中有关于时间和日期的方法都在time包里面,Go语言的time包为开发者提供了一套全面而简洁的工具来处理时间相关的操作。
2024-08-24 12:41:14
972
原创 Go语言Context的基础使用
Context是Go语言在1.7版本引入的,Context可以用来在goroutine之间传递上下文信息,通常可以用来进行超时控制,消息传递等,Go语言官方建议的将Context作为函数的第一个参数并不断地透传下去以实现在不同的goroutine之间传递上下文。
2024-08-12 19:25:59
397
原创 Go语言定时器Timer和Ticker到底怎么用
在日常开发中,我们不可避免的需要使用到定时任务用来处理业务逻辑。在Go语言中内置的有两个定时器,`Timer`和`Ticker`,合理的使用这两个定时器可以很好的解决定时任务的需求,同时除了这两个内置的定时器外,还有另外的三方库也可以用来完成定时任务的需求。
2024-07-01 19:00:00
617
原创 Go语言测试第二弹——基准测试
基准测试,也就是`BenchmarkTest`,基准测试是用来测试代码性能的的一种方法,使用基准测试时,测试函数必须以`Benchmark`开头,后面跟具体需要测试的函数的名称
2024-06-27 17:02:51
937
原创 Go语言轻松搞定Excel的操作,简单生成图表
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。
2024-06-18 10:35:02
1370
原创 Go语言入门【11】接口
在go语言中,接口是一种抽象的类型,它把所有的具有共性的方法定义在一起,换句话说接口就是一组方法的集合,任何其他类型只要实现了接口里面的**所有**方法就是实现了这个接口。
2023-03-21 11:20:28
649
原创 Go语言入门【10】Map
map是一种键值对形式的数据结构,一个键对应一个值,可以通过键快速检索出其对应的value值,在map中key的值是唯一的,value的值不唯一,并且map中保存的数据是无序的。
2023-02-16 11:23:41
493
原创 Go语言入门【09】结构体
相比于Java,在Go语言中没有类的概念,但是多了结构体。结构体与Java中的类很像,是表示一系列同一类型或不同类型的数据构成的数据集合。
2022-12-21 10:33:49
481
原创 Go语言入门【8】函数
函数是go语言中最基础的代码块,通常将需要当做一个整体执行的任务抽象成一个函数,例如前面用到的len、cap和append等都是系统定义好的函数,还有go里面的main函数,他是go程序运行的入口函数,是必不可少的一个主函数,而且go语言中有且仅有一个main主函数。函数声明时需要指定函数名称、参数列表和返回列表。声明函数时需要使用关键字func,函数声明语法如下:函数名:在其他地方调用时需要用到的名称参数列表:当函数被调用时可以根据参数列表传递对应的参数,在函数体中可以使用参数,参数列表需要指定参数名和
2022-11-27 17:46:22
478
原创 Go语言入门【7】指针
在go语言中,每一个变量在运行时都会拥有一个地址,这个地址代表的就是变量在内存中的位置,而指针就是指向这个地址的变量。使用go语言中的指针很简单,只需要记住两个关键字符,&(取地址符)和*(取值符)。
2022-11-25 14:59:46
456
原创 Go语言入门【6】切片
定义切片和定义数组很像,区别就是定义一个切片不需要指定长度。var 切片名 [ ] 类型切片还可以使用make函数定义。第一个参数为切片类型,可以是等。第二个参数为切片初始长度。第三个为切片容量,该参数为可选参数。
2022-11-17 09:31:29
1129
原创 Go语言入门【5】数组
数组是相同数据类型的一组长度固定的序列,类型可以是整形、字符串和浮点型等,数组元素可以通过索引来读取或者修改,索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推,最后一个元素的索引为数组长度减1。
2022-11-14 10:04:48
513
原创 Go语言入门【4】循环语句
循环语句是一个编程语言中不可缺少的一部分,循环通常用来完成具有规律性的重复性的操作,例如计算1到100的累加或者累乘。
2022-11-09 09:55:49
701
原创 【LeetCode】19-删除链表的倒数第 N 个结点
19-删除链表的倒数第 N 个结点题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例示例一输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例二输入:head = [1], n = 1输出:[]示例三输入:head = [1,2], n = 1输出:[1]提示链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <=
2022-04-26 20:07:08
1229
1
原创 【LeetCode】396-旋转函数
396-旋转函数题目描述给定一个长度为 n 的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]返回 F(0), F(1), ..., F(n-1)中的最大值 。生成的测试用例让答案符合 32 位 整数。示例示例 1:输入: nums = [4,3,2,6]输出: 26解释:F
2022-04-22 16:51:06
1313
原创 【LeetCode】26-删除有序数组中的重复项
26-删除有序数组中的重复项怎么初级就有点打脑壳 ——来自LeetCode评论区题目描述给你一个升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在
2022-04-21 21:15:45
795
原创 【LeetCode】20-有效的括号
20-有效的括号题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例示例一:输入:s = "()"输出:true示例二:输入:s = "()[]{}"输出:true示例三:输入:s = "(]"输出:false示例四:输入:s = "([)]"输出:false示例五:输入:s = "{[]}"输出:true提
2022-04-16 20:05:12
1392
原创 【LeetCode】3-无重复字符的最长子串
3-无重复字符的最长子串题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答
2022-04-15 21:34:15
1017
原创 【LeetCode】2-两数相加
2 两数相加题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例示例一输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例二输入:l1 = [0], l2 = [0]输出:[0]示例三输入:l1 = [9,9,9,9
2022-04-13 20:12:54
272
原创 【LeetCode】01-两数之和 梦开始的地方
1 两数之和题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。示例 2:输入:nums = [3,2,
2022-04-12 21:34:48
202
原创 Nacos入门
1 简介Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。——《nacos官网》前提环境:● 64 bit JDK 1.8+● Maven 3.2.x+2 安装下载地址:https://github.com/alibaba/nac
2021-11-21 14:39:32
2105
3
原创 Java使用EasyExcel操作Excel表格
1 EasyExcel简介EasyExcel是阿里巴巴开源的一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。github地址:https://github.com/alibaba/easyexcel官方文档:https://www.yuque.com/easyexcel/doc/easyexcel2 EasyExcel的使用2.1 写入Excel将一个实体类的数据写入到Excel表格中。POM导入依赖:<dependency&
2021-11-06 19:17:56
6329
原创 设计模式系列之模板方法模式
1 定义模板方法模式定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。《百度百科》模板方法模式,首先从名字看,关键点就是模板,模板很好理解,就是定义好一个模板,然后其他需要用到这个模板的地方根据定义好的模板做自己的实现。例如HR发给你一个转正答辩的PPT模板,在PPT模板中已经划分好了工作总结、下阶段职业规划等大纲,且规定必须按照这个大纲来做PPT,那么这个PPT就是模板,而每个人在不改变大纲的情况下去写不同的内容,这个就
2021-10-27 17:27:40
142
原创 Java垃圾收集器详解
1 概述之前的文章介绍了JVM的基础入门以及Java垃圾回收算法的详解,本章的内容主要介绍在Java中常用到的垃圾收集器。JVM入门Java垃圾回收算法详解如果说垃圾回收算法是虚拟机中垃圾回收的理论,那么垃圾收集器就是针对于这些理论的具体实现,并且不同厂商和不同版本的虚拟机所提供的垃圾收集器可能会有区别,所以本文主要基于HotSpot虚拟机进行讲解。1.1 前置知识1.1.1 Stop The World进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束为止,这个过程称为 Stop T
2021-10-21 20:04:51
1200
原创 Java垃圾回收算法详解
1 概述在前一篇文章中讲到了Java虚拟机的基础知识和运行时数据区的划分,在运行时数据区的划分中,可分为线程共享区域和线程私有区域,而Java的垃圾回收就发生在线程共享区域中,更直观的说法就是Java的垃圾回收大部分都发生在Java的堆(Heap)区域内。1.1 哪些对象需要回收在了解了Java垃圾回收主要发生在哪些区域之后,然后我们就需要知道在Java中哪些对象是需要被当做垃圾回收的,这是一个很简单的问题,既然是需要回收的,那肯定就是在程序中已经使用过且后续不会再用到的对象,那怎么判断一个对象是否还
2021-10-16 17:18:18
2008
原创 JVM入门
1 基本概念1.1 JVM概念JVM(Java Virtual Machine)Java虚拟机,即一个用于执行Java代码的虚拟机器,JVM可直接运行在不同的操作系统上。Java代码通过编译器编译生成.class字节码文件,字节码文件又经过JVM中的解释器编译成可直接运行的机器码,这也就是Java能够实现跨平台的原因。1.2 JVM所在位置JVM是直接运行在操作系统之上, 并不会直接与系统硬件进行交互。1.3 运行过程Java源文件通过编译器编译成字节码文件,字节码文件通过JVM编译成对应平台
2021-10-14 19:48:40
358
原创 什么是JWT?新手5分钟入门JWT的使用
JSON Web Token(JWT)是一种开放标准(RFC7519),它定义了一种紧凑而独立的方式,用于在各方之间作为JSON对象安全地传输信息。此信息是可以验证和信任的,因为它是经过数字签名的。
2021-10-12 16:51:59
15176
原创 SpringBoot整和RocketMQ
在进行SpringBoot和Rocket整合之前需要启动RocketMQ的name server服务和Broker服务1.pom依赖文件<dependencies> <!-- 因为需要通过访问URL实现发送消息,所以需要web依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr.
2021-05-21 13:51:59
337
2
原创 设计模式之单例模式(通俗易懂,超详细)
1 什么是单例模式单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)——《百度百科》简单来说单例模式就是指在内存中只会创建且仅创建一次对象的设计模式,当程序中其他地方需要使用到该对象的相同功能时,都会调用创建好的这一个,不会再额外创建实例,这样做的好处就是避免过多的创建相同作用的对象使得内存浪费。2 单例模式分类在单例模式中主要分为两类,分别是懒汉式和饿汉式懒汉式:在程
2020-07-15 11:55:20
2539
1
原创 设计模式之工厂模式
一、概念工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。在工厂模式中分为简单工厂模式和抽象工厂模式,抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模
2020-07-10 16:26:03
214
原创 Android简易计算器——LinearLayout布局
一、效果图二、代码实现按键默认样式<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 按钮背景 --> ...
2020-04-18 22:17:58
834
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人