漫谈编程基础
文章平均质量分 69
漫谈编程基础
闫同学鸭
让峡谷旷野放一片晴
展开
-
原来go build命令有这么多学问
go build 是 Go 语言中一个非常强大且灵活的命令,它使得从源代码到可执行文件的转换变得简单而直接。通过利用它的各种选项和跨平台编译功能,你可以轻松地编译和分发你的 Go 程序。无论是在开发过程中还是在准备部署时,go build 都是 Go 程序员工具箱中不可或缺的一部分。与此同时,编译原理确实是一门非常值得深入学习的课程,它不仅在理论层面上构筑了计算机科学的重要基石,更在实践应用中展现了其无可替代的价值。原创 2024-10-05 11:01:52 · 1559 阅读 · 0 评论 -
听说它可以让代码更优雅
总的来说,静态代码检查工具是一个能够提升我们代码质量的工具,可以发现编译器发现不了的问题。这些工具的使用可以显著提高软件质量,所以大家赶快掌握起来,写出更优雅的代码!原创 2024-07-30 22:40:25 · 299 阅读 · 0 评论 -
预测一波,这份Go语言资料即将爆火
顾名思义,是一个旨在分享Go语言学习过程中的100个小技巧与易错点的仓库。这些技巧不仅覆盖了Go语言的基础语法、高级特性,还深入探讨了性能优化、并发编程等进阶话题。作者以文章的形式,将每一个问题、每一个技巧都阐述得清晰明了,既适合初学者巩固基础,也适合有一定经验的开发者查漏补缺、提升技能。原创 2024-07-12 22:19:13 · 458 阅读 · 0 评论 -
信不信让你1天学会一门编程语言
到这里本篇文章就要接近尾声了,不知道大家看完之后有没有对Lua有一些掌握,当然在实际案例中我只展示了如何让Redis执行Lua脚本,那么为什么Redis可以直接执行Lua而MySQL却不行,主要是因为两者在设计和功能上的差异。Redis通过引入对Lua脚本的支持,使得其在处理需要原子性保证的复杂逻辑时具有优势;而MySQL则主要依赖于SQL语言进行数据操作,并通过存储过程、触发器等方式来丰富数据的操作方式。除此之外,Lua在其他方面有哪些使用方式,有知道的小伙伴可以留言~原创 2024-07-06 16:24:48 · 1018 阅读 · 0 评论 -
工作两年后,我如何看待设计模式
虽然设计模式提供了一套通用的解决方案,但在实际应用中,往往需要根据项目的具体需求和约束进行适当的调整和创新。这就要求开发者不仅要熟悉设计模式的基本原理,还要具备足够的创新意识和实践能力,以便将设计模式与项目的实际情况相结合,创造出既符合设计要求又具有创新性的解决方案。因此,开发者在应用设计模式时,需要时刻考虑如何在满足当前需求的同时,为未来的变化留下足够的空间。,用于解决在软件设计中经常遇到的一类问题。总的来说,设计模式是编程中一种宝贵的工具,它们能够帮助我们解决复杂的问题,提高代码的质量和维护性。原创 2024-07-06 16:23:58 · 688 阅读 · 0 评论 -
为什么说组合优于继承?
继承和组合之间的选择取决于软件设计的要求和目标。一般来说,建议尽可能使用组合,以避免强耦合。当需要建立明确的“是”关系和类层次结构时,继承很有用,但应谨慎使用,以避免长期设计问题。在许多情况下,继承和组合的平衡组合可能是最佳解决方案。参考:原创 2024-06-08 09:36:23 · 807 阅读 · 0 评论 -
这些Coding套路你不会还不知道吧?
本文主要介绍了Go开发中常用的设计模式,包括全局单一实例:单例模式、工厂模式、模板方法模式、策略模式和Functional Options模式。这些设计模式可以帮助我们更好地组织代码,提高代码的可读性和可重用性。总之,掌握这些设计模式对于提高Go程序员的编码能力非常有帮助,可以让我们在编写代码时更加得心应手,同时也能提高代码的质量和可维护性。原创 2023-09-17 21:15:43 · 153 阅读 · 12 评论 -
一文搞懂常见的加密算法
加密算法在互联网技术领域中几乎是无处不在,而密码学也是网络安全的重要基础,这篇文章我们就一起来学习下常见的加密算法。原创 2023-07-09 10:07:02 · 417 阅读 · 0 评论 -
Go常用设计模式(下)
装饰器模式很容易理解,他就是在我们想要调用方法的时候增加一些额外的操作,这种操作我们就成为装饰,就是让对象经过装饰增加需要的属性或功能。但是Go实现的代理模式和Java实现的相比不太容易理解,所以还需要我们多花一些时间来理解。原创 2022-09-04 22:28:21 · 305 阅读 · 0 评论 -
Go常用设计模式(中)
由于都是属于行为型模式,策略模式和模板方法模式在实现的过程中非常的类似,但不同的是模板方法模式更偏向于部分功能的复用,而策略模式更偏向于多种功能的选用。原创 2022-09-04 14:27:18 · 302 阅读 · 10 评论 -
Go常用设计模式(上)
因为Go语言并不是严格意义上的面向对象的编程语言,而且二十三种设计模式中有一部分是需要使用到面向对象封装、继承、多肽的特性的,因此Go语言并不是完全能够且适合二十三种设计模式,但是经常用到的设计模式也是非常重要的。...原创 2022-08-28 09:17:41 · 610 阅读 · 0 评论 -
浅谈Go并发原语
在操作系统中,往往设计一些完成特定功能的、不可中断的过程,这些不可中断的过程称为原语。因此,并发原语就是在编程语言设计之初以及后续的扩展过程中,专门为并发设计而开发的关键词或代码片段或一部分功能,进而能够为该语言实现并发提供更好的支持。...原创 2022-07-12 11:17:02 · 675 阅读 · 4 评论 -
玩转gRPC—深入概念与原理
本篇文章属于一篇知识的捡漏和复盘类的文章,主要目的就是为了复盘一下gRPC的相关概念,并剖析其原理。原创 2022-07-04 20:22:30 · 1282 阅读 · 10 评论 -
详解线程同步和线程互斥,Java如何实现线程同步和互斥
最开始我们的操作系统的作业的调度单位是进程,但是由于每个进程都单独占据一个资源,而且进程的形态转换非常的耗费系统资源。为了系统的调度更加轻量级,能够更好的支持并发,因此引入了线程这个概念。...原创 2022-06-09 21:04:03 · 1145 阅读 · 0 评论 -
一文带你搞懂HTTP和RPC协议的异同
1 什么是RPC协议1.1 简介这是老生常谈的协议了,RPC即远程过程调用(Remote Procedure Call),RPC协议是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。1.2 原理及模型RPC协议广泛的应用于分布式系统中,主要用于不同计算机(即服务节点)间的通信,RPC主要是基于Socket,而Socket又基于TCP,因此我们可以理解为RPC基于TCP协议(部分RPC框架基于HTTP协议),在TCP的基础上增加了编程语言的机制,比如反射、编码与解码、以及动态原创 2022-05-08 20:27:51 · 5622 阅读 · 0 评论 -
一文搞懂从浏览器输入一个URL到页面出现都经历了哪些过程
1 过程一览DNS解析(如果IP直接访问则此过程省略)客户端与服务端进行TCP三次握手连接客户端发送HTTP请求服务器处理请求并返回HTTP报文浏览器解析渲染页面连接结束2 细节剖析2.1 DNS解析域名系统(英文全称:Domain Name System,简称DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。域名系统是In原创 2022-04-10 07:20:36 · 4632 阅读 · 0 评论 -
细说值传递、引用传递和地址传递
细说值传递、引用传递和地址传递1 实参和形参形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。func main() { i := sum(2, 4) //2,4为实参 fmt.Println(i)}func sum(a int, b int) int { //a,b为形参 c := a return原创 2022-01-30 21:32:09 · 2057 阅读 · 0 评论 -
深入浅出装饰者模式
1 简单介绍装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。四个重要角色:抽象组件Component:一个接口或者抽象类,是定义我们最核心的对象(最原始的对象),被装饰类的抽象。具体组件ConcreteComponent:最核心、最原始、最基本的接口或抽象类Component的实现原创 2021-10-09 17:26:16 · 118 阅读 · 0 评论 -
图解B Tree和B+ Tree
图解B Tree和B+ Tree1 B Tree起源一篇国外的论文:https://infolab.usc.edu/csci585/Spring2010/den_ar/indexing.pdf论文名称为大型有序索引的组织和维护,其中就指出了B Tree这个数据结构其中,B Tree的定义:从根到叶结点的每条路径长度都是h,也称为Tree的高度,即h = 路径中的节点数。除根节点和叶节点外,每个节点至少有k -1个儿子。 根至少有两个儿子。每个节点最多有2k-1个儿子。2 B Tre原创 2021-10-05 11:06:23 · 420 阅读 · 0 评论 -
《剑指offer》之从上到下打印二叉树Ⅰ、Ⅱ、Ⅲ
《剑指offer》之从上到下打印二叉树Ⅰ、Ⅱ、Ⅲ1 从上到下打印二叉树Ⅰ1.1 题目https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/1.2 思路1.3 题解二叉树类(下同):/** * @desc: 二叉树类 * @author: YanMingXin * @create: 2021/9/13-15:52 **/public class TreeNode { int val原创 2021-09-14 11:15:17 · 117 阅读 · 0 评论 -
深入浅出建造者模式-干货!
1 简介建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。实用范围当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同表示时。角色在这样的设计模式中,有以下几个角色:builder:为创建一个产品对象的各个部件指定抽象接口。ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。D原创 2021-08-20 09:46:07 · 214 阅读 · 0 评论 -
《剑指offer》之“翻转单链表”递归、迭代、双指针解题
题目:《剑指offer》第二十四题https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/解法:递归算法、迭代算法、使用双指针开始操作~首先加一个链表类:static class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}解法一:迭代算法(1)思想使链表自身进行变化,使每个节点的next.原创 2021-08-26 10:51:19 · 186 阅读 · 2 评论 -
数据结构之串—字符串而不是羊肉串
1 串的介绍概念:串是由零个或多个字符串组成的有限序列,又名叫字符串。例如:str = “abc”,当字符串由零个字符组成时,被称为空串,即 str = null2 字符串的比较说到字符串的比较,想到的只有“==”,其实字符串也可以使用"<","<=",">=",">"等符号来比较,当然使用这些符号来比较时主要是根据字符串中每个字符的ASCII来比较,再举个例子:String str1 = "abc";String str2 = "abcd";String str3原创 2021-08-25 10:59:18 · 205 阅读 · 0 评论 -
《剑指offer》之从“尾到头打印链表”题解
题目:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/题解:一说到链表题,我们第一就会想到迭代算法和递归算法,但是看下本题的要求,是从尾到头打印链表,就不需要搞一个新的链表,所以迭代算法可以先pass掉,因此我们优先考虑递归,可以不断寻找链表的Next,直到Next为null,然后不断向上返回值。图解:代码:链表类:static class ListNode { int v.原创 2021-09-01 11:38:43 · 124 阅读 · 0 评论 -
深入浅出迭代器模式
1 概念迭代器模式在设计模式中属于行为型模式,用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式的结构中包括四种角色:抽象集合(Abstract Aggregate)具体集合(Concrete Aggregate)抽象迭代器(Abstract Iterator)具体迭代器(Concrete Iterator)2 案例说明对Student类实现迭代输出3 代码实现Aggregate.java/** * @desc: 集合容器抽象 * @author: YanM原创 2021-09-09 18:13:07 · 117 阅读 · 0 评论 -
《剑指offer》之“包含min函数的栈”题解
题目:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/解题思路:题目要求实现一个包含min()函数的栈,min()函数的作用是返回栈中的最小值,因此我们可以想到使用一个辅助的数据结构来进行实现。首先我们想到的是一个小根堆或者是一个排序的List,但是题目的要求是时间复杂度为O(1),这就排除了大多数的解决办法了。想到时间复杂度为O(1),想必大多数同学都会想到用HashMap,但是再看看案例,再删除一个最小值.原创 2021-08-30 09:34:42 · 115 阅读 · 0 评论 -
深入浅出模板方法模式
1 概念在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。2 应用场景有多个子类共有的方法,且逻辑相同。重要的、复杂的方法,可以考虑作为模板方法。3 实际使用案例3.1 场景分析一个国际上市公司的老板Tom经常去不同的国家谈合作,邮件中需要进行自我介绍,在不同的国家需要不同的语言,但是介绍的模板都是相同的,主需要更换不同语言的名字就可以实现自我介原创 2021-08-29 08:15:24 · 163 阅读 · 0 评论 -
深入浅出过滤器模式
过滤器模式(Filter Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。过滤器模式中几个常见的角色:AbstractFilter(抽象过滤器角色):在客户端可以调用它的方法,在抽象过滤器角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派到相应的实现类去,传递给相应的实现类对象处理。ConcreteFilter(具原创 2021-08-14 09:09:24 · 300 阅读 · 2 评论 -
深入浅出职责链模式
深入浅出职责链模式简介 职责链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。 责任链模式涉及到的角色如下所示:● **抽象处理者(Handler)角色:**原创 2021-08-16 10:26:06 · 141 阅读 · 0 评论 -
手写一个简单的二叉树
数据结构:节点类:/** * @author 17122 * 节点类 */public class Node<E> { /** * 节点的权(值) */ private E value; /** * 左儿子 */ Node<E> leftNode; /** * 右儿子 */ Node<E> rightNode; public Node原创 2021-08-06 09:22:22 · 1246 阅读 · 0 评论 -
手写一个简单的LRU Cache
1 LRULRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。2 LinkedHashMapLinkedHashMap = HashMap + 双向链表LinkedHashMap的数据结构:具有相同key的情况下:3 实现LRU/** * @des原创 2021-08-13 10:03:45 · 280 阅读 · 0 评论 -
关于阻塞队列
1 概念和数据结构支持以下操作的队列:在检索元素时等待队列变为非空在存储元素时等待队列中的空间变为可用。BlockingQueue方法有四种形式,具有不同的处理操作的方法,这些操作不能立即得到满足,但可能在将来的某个时候得到满足:第一个抛出异常,第二个返回一个特殊值(null或false,取决于操作),第三个阻塞当前线程,直到操作成功,第四个阻塞只有给定的最大时间限制,然后放弃。这些方法总结如下表: BlockingQueue方法的总结接下来是Bloc原创 2021-08-02 09:50:24 · 266 阅读 · 0 评论 -
手写一个简单的HashMap
什么是HashMap?探讨HashMap之前我们要理清楚一个概念:哈希表哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。然后是HashMa原创 2021-08-09 10:47:45 · 541 阅读 · 0 评论 -
深入浅出适配器模式
深入浅出适配器模式简介在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。对象适配器模式在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。类适配器模式这种适配器模式下,适配器继承自已实现的类(一般多重继承)适配器模式思想:适配器模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。原创 2021-07-13 09:04:50 · 158 阅读 · 0 评论 -
一篇文章学会Java十大排序算法
Java十大排序算法1.1 选择排序选择排序算法的运作如下:①从待排序序列中,找到关键字最小的元素;②如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;③从余下的 N - 1 个元素中,找出关键字最小的元素,重复①、②步,直到排序结束。/** * 选择排序 * * @param array * @return */public static int[] selectSort(int[] array) { for (int i = 0; i < array.l转载 2021-07-14 08:35:44 · 145 阅读 · 0 评论 -
一则有趣的算法题:两个栈实现一个队列
题目:如题,就是用两个栈实现队列的特性1 基本架构首先我们声明两个栈和自定义队列的基本结构、功能static class MyQueue<E> { /** * 首先声明两个栈 */ public Stack stack1 = new Stack<E>(); public Stack stack2 = new Stack<E>(); /** * 添加操作 * @param e */原创 2021-07-18 12:41:15 · 186 阅读 · 0 评论 -
算法题—顺时针打印矩阵
题目描述将一个n阶矩阵顺时针打印,例如# 二阶矩阵1 2 3 2# 顺时针打印结果:1 2 2 3# 四阶矩阵1 2 3 45 6 7 89 4 5 69 0 3 2# 顺时针打印结果:1 2 3 4 8 6 2 3 0 9 9 5 6 7 5 4题目条件:7 > n > 0解题思路:首先要搞懂顺时针的次序:向右 -> 向下 -> 向左 -> 向上因为是二维数组,可以只用x和y来表示将要访问的遍.原创 2021-07-10 12:25:55 · 251 阅读 · 3 评论 -
计算机网络知识和TCPIP常见问题
计算机网络知识和TCP/IP常见面试题一、首先谈一谈计算机网络模型1.1 OSI七层模型 七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。 它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。 下面这张如可以解释每一层及作用:1.2 TCP/IP四层模型原创 2021-06-27 11:02:58 · 355 阅读 · 2 评论 -
Java数据结构之链表及其常见算法
一、什么是链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访原创 2021-06-25 20:47:07 · 527 阅读 · 0 评论 -
《计算机操作系统》重点知识笔记整理(二)
第五章 虚拟存储器1 特征和局部性原理(P164)(1)特征:一次性、驻留性(2)局部性原理: 原理概述: 程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应的,它所访问的存储空间也局限于某个区域。 论点:程序执行时,除了少部分的转移过程调用指令之外,在大多数情况下是顺序执行的。过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域。但经研究看出,过程调用的深度在大多数情况下都不超过5。程序中存原创 2021-06-17 13:15:33 · 1334 阅读 · 5 评论