- 博客(136)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【软件架构】ECS游戏架构
通过继承联系起来的对象,一旦某个共同功能需要改动,或增加功能,就要调整类的结构。不处于同一条继承线中的对象如果有相同的功能,也无法通过继承的方式复用代码,造成了代码重复。现在我们尝试。
2023-03-16 20:25:29
7381
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【服务化架构】SOA和微服务架构、灵活架构
这些SOA风格,既可以用于web,也可以用于其他领域,比如游戏架构游戏架构中可以将服务端分为:逻辑服、战斗服、AI服等,就像名字一样对应不同的服务在web方面SOA可以和REST结合起来使用
2023-03-14 21:28:40
1230
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【REST系列】详解REST架构风格 —— 带你阅读Web发展史上的一个重要技术文献
摘自论文中的《论文摘要》ful是形容词后缀,RESTful表示REST式、REST形式的、REST样子的任何遵守REST约束的系统都被称为RESTful(Rest式)架构wiki-REST(这里在描述上仅限定于Web服务是不客观的)“Fielding的这篇论文是Web发展史上的一个重要的技术文献,值得每一位web乃至internet工作者阅读。”—— 如果仅仅这么说,大家可能并不会在意它。为了让我们重视REST,知道它的价值。就不得不了解论文的作者 —— Roy Fielding。
2022-10-31 17:13:32
2657
2
原创 【编程语言】一些主流编程语言的共有特性区别整理
C语言中有"声明"和"定义"的区分。因为它的源代码编译的时候是从上往下编译的,上边的代码如果用到了下面定义的函数或变量,会报错。因此需要把函数原型和变量名声明到使用它们的上边。其它语言的源代码或许也是从上往下编译的(不然呢?),但他们都很好地避免了C的这种问题。这或许和C的历史有关,早期的C甚至必须要把变量定义在代码块的最顶部,不能把变量和代码块内的其它逻辑代码穿插在一起。其它语言里,"声明"和"定义"的说法是混用的。
2024-07-17 17:31:49
832
原创 【ECS游戏架构】逻辑帧驱动带来的性能和即时性问题分析
ECS的逻辑帧驱动在实际应用中可能会存在一些问题:两帧之间资源空闲、即时性低。本文分别从 把ECS应用到帧同步、状态同步,以及对应的客户端、服务器来进行分析。
2023-10-24 01:23:12
536
原创 【Golang】Go的并发和并行性解释。谁说Go不是并行语言?
偶然发现百度上有很多"师出同门"的"go是并发语言,而不是并行语言"的说法。最终我认为起点大概率是在"Rob Pike"(Go作者之一)于2012年发表的一场演讲,名为"并发不是并行"。之后则被标题党曲解为"go是并发语言,而不是并行语言"。简单说,Rob Pike 用很多"地鼠工人"(gopher)把一个"烧书"任务进行了循序渐进的并发设计,这是一个三只地鼠协同工作的设计,每个地鼠都是一个独立执行的一段程序。
2023-10-15 21:54:01
535
1
原创 【Golang】什么是内存逃逸?
在Golang中,内存逃逸指的是在函数中分配的局部变量或对象,由于其生命周期需要延长或在函数外部继续使用,导致编译器将其分配到堆区而不是栈区的情况。这种情况下,变量或对象的生命周期超出了原本的作用域,需要在堆上分配内存以保证数据的有效性。但是,如果编译器无法确定变量的声明周期是否会超出作用域,就会将其分配到堆上,以确保数据访问的有效性。当然,使用栈上的内存更具有性能,如果你特别在意这种性能的话,以下是一些。,一旦当前函数执行完毕,局部变量占用的内存也将被释放,因此以下代码无法将数组的内容传递出去。
2023-08-25 21:08:55
751
原创 【算法】算法效率分析 -- 时间空间复杂度
算法的效率分析,主要从「时间」和「空间」两个维度进行分析。时间维度顾名思义就是算法需要消耗的时间,用术语 -“时间复杂度”表示。空间维度代表算法需要占用的内存空间,用术语 -“空间复杂度”表示。在计算机发展的早期,计算机的存储容量很小,所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。算法本质上是一连串的计算步骤。
2023-06-28 14:05:03
651
原创 【踩坑】sftp无法连接:Received message too long 1763729773 Ensure the remote shell produces no output for ...
坑点在于使用Tabby(一个终端模拟器)连接sftp并不会报错,而是一直没反应。只有使用命令行连接时,才得知了这个错误,但平时很少人会尝试用命令行连接。
2023-04-25 16:33:30
4613
2
原创 RAID磁盘阵列、mdadm、群晖软RAID
软件RAID(Software RAID),简称软RAID:通过操作系统、软件实现的RAID,依赖于操作系统。尽管依赖于操作系统,但软件RAID也可以为任意分区实现RAID,即软RAID也可以保护引导分区和系统分区。硬件RAID(Hardware RAID),简称硬RAID:通过硬件来实现的RAID,独立于操作系统。如:RAID卡、主板集成的RAID(板载RAID控制器) 都是硬RAID。(看到有文章说"软RAID是通过操作系统或软件实现的,因此系统本身不能参与实现RAID",显然这个说法是错误的)
2023-04-24 16:32:40
2413
原创 【网络】Socket | RPC 通信细节 知识点
程序设计实践》第9章中提到,“大端”和“小端”可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,他们分别被称为"大端(big-endian)派"和"小端(little-endian)派",因为这种争执,甚至爆发了战争,其中一个皇帝送了命,另一个丢了王位。例如,一个4字节的int类型变量a,其存储的起始地址为0x100,那么a的4个字节将被分别存在0x100,0x101,0x102,0x103的位置。
2023-03-12 00:24:33
1137
原创 【杂谈】聊一聊所谓的“跨语言、跨平台“
例如 Java,一套代码编译之后的jar包,可以在Windows、MacOS、Linux、Solaris平台上运行,只需要在这些平台上安装对应平台的Java运行环境(JRE)即可。而不跨语言的技术也有,比如golang的gob、java的serializable,这些语言自带的序列化不是跨语言的,它们包含了很多语言特性。平台指的是运行环境,如CPU架构不同(引发的指令集不同)、系统架构不同(导致的API不同)、设备形态不同(大小、运行方式、操作方式等)跨语言和跨平台,是比较重要的一个特性。
2023-03-11 16:38:44
1368
原创 【网络】什么是RPC?RPC与HTTP有什么关系?
很多人喜欢把RPC与HTTP作比较,因为HTTP是web领域最常用的网络通信协议,而RPC也是进行网络通信的方法,并且有一些RPC库还是基于HTTP实现的。在大多数人看来,HTTP已经是比较万能的通信协议了,于是就对RPC的定位感到捉摸不透。
2023-03-10 23:24:29
642
原创 【REST系列】为什么HTTP是“超文本移交协议“,而不是“传输协议“
对于HTTP中transfer的解释,并不需要干涉到ftp等词的解释,解释为传输其实没有问题,即使在英语中,transfer也会在不同语境下被理解为"转移"或"传输"等,这是正常的。之所以说HTTP并非被设计为一种传输协议,是因为HTTP的设计目的确实不是传输,因为"传输"这件事情,传输层协议TCP/UDP已经做的很好了,不需要HTTP再来越俎代庖。而Fielding所说的"HTTP不是一个传输协议",而是一个移交协议,也完全能够理解,能够清楚地解释,这种解释更倾向于思维方式,也是值得尊重的。
2022-10-31 23:08:18
358
原创 【Golang】为什么不能获取map中value的地址?Cannot take the address
(或许有人认为还有一种方法,就是把value声明为指针类型,就可以通过指针修改对应的值了。这种做法,value的值就是地址,所以并没有修改value的值,只是修改了value的值(地址)指向的值),之前保存的地址也就失效了。即便通过一些unsafe的方式获取到了地址,也不能长期持有。为什么无法获取map的value的地址呢?这是因为map中的值地址在内存中是动态的,对尝试寻址的代码,编译会抛出。
2022-10-24 15:48:12
885
原创 【Golang】不能对map中的值类型结构体成员直接赋值问题:cannot take the address | cannot assign to struct field xxx in map
的意图是无法实现的。这行代码并不能修改map中的数据,因为map的value是值类型的结构体。中提到:在进行Assignments(分配、赋值)时,左侧。一种是把map中的value(结构体)定义为指针类型。指向的结构体数据一样,但是内存地址不一样。开头的错误示例,其实就是因为赋值符号(,从上面的拆解其实很容易解释:拆解中用。另一种是对map中的value进行替换。赋值到哪里去,无法寻址。,这造成的问题是编译器不知道要把。的值,和map中的数据没有关系。这行代码却没有变量接收。这就像是下面的例子。
2022-10-24 15:20:12
2132
原创 【编程语言】什么是闭包?你可能经常在用它,只是不知道它叫闭包!
闭包(closure)的概念是在20世纪60年代为λ-微积分中表达式的机械评估而提出的,并在1970年首次作为PAL编程语言的一个语言特征被完全实现,以支持词义范围内的一等函数现在如果搜索“闭包”,出现的结果中很多都是关于 JavaScript 的,文章中都是以 JavaScript 讲解闭包的特性,以及在 JS 中的应用场景,但是我们应该清楚,闭包最初的出现是在 JS 之前 30 年,那时解决的场景是当时语言 lambda 演算的不足。闭包的使用与函数是一等对象的语言有关。
2022-10-03 23:14:03
2542
原创 node、npm、cnpm、yarn介绍和使用
Node.js以.js结尾,听起来像是个js库,实际并不是,它是一个运行环境。Node.js,简称Node。发布于2009年5月,作者Ryan Dahl,使用C++开发,是一个基于Chrome V8引擎的JavaScript运行环境(runtime),使用事件驱动、非阻塞式I/O模型。
2022-09-30 23:12:37
5232
原创 【Linux基础】zsh 和 Oh My Zsh
我们还可以按热键,比如从网上下载了一个 tar 包解开后要稍微浏览一下里面的内容,用的最多的两条命令是啥呢?命令可以设置一系列热键,用来运行某一个 zsh 内部命令或者某个 shell 命令,谁规定终端只能敲字母呢?这个主题提供漂亮的提示符,可以显示当前路径、时间、命令执行成功与否,还能够支持 git 分支显示等等。好像是通过插件拓展的,支持一些常用的命令(git、svn、tar等):这个是自动建议插件,能够自动提示你需要的命令。是一个令人愉快的、开源的、社区驱动的框架,用于管理您的 Zsh 配置。
2022-09-28 19:47:43
1163
原创 【Linux基础】理解并善用Shell -- Shell精讲
在计算机科学中,Shell俗称"壳"(之所以叫壳,是为了和计算机的"核"(内核)来区分),指 **=="为用户提供操作界面"的软件==**,有时也被称为==命令解析器==(command interpreter)。进一步解释为:Shell是一个用户与内核的交互程序,它接收用户输入的指令,传递给内核执行(内核并不直接提供与用户的交互功能)可以说,**没有shell就无法使用Linux**,shell是Linux实打实的敲门砖
2022-09-27 22:59:37
2264
原创 【杂记】ANSI、ANSI编码、ASCII编码、ASCII控制字符、ANSI转义序列
(American National Standards Institute):美国国家标准协会。
2022-09-20 18:13:44
2337
原创 【网络】把路由器用作交换机的方案
把路由器当做交换机,主要是针对家用路由器。因为家里的路由器更新换代,会淘汰下来旧路由器,如果正好有使用交换机的需求,就正好可以作为交换机使用ps:如果单纯把路由器当交换机使用(不考虑还使用WiFi功能),不划算,因为一年多花的小几十块钱电费也可以买一个便宜的交换机了。
2022-09-14 16:49:57
4135
原创 【网络】网络基础知识点(MAC、IP、通讯模式、通信方式、集线器、交换机、路由器、冲突域/广播域、ARP、VLAN等)
A:有限的Mac地址,不断的使用,迟早是会消耗完的。在今后的通讯中,发往某个MAC地址的数据包将仅送往其对应的端口,而不是所有的端口(如果没有找到该MAC,那么就把数据包发往所有端口,即"泛洪",如果某个端口应答,就记录MAC,并将数据包发往该端口,否则丢弃)一开始的时候,由于硬件水平不是很发达,人们为了提高局域网效率,减少广播风暴的出现,生产了网桥,然后他们把一个局域网一分为2,中间用网桥连接,这样A发给BCD的数据就不会再广播到EFGH了,只有从A发到EFGH的数据包才能通过网桥,到达另外一个子网。
2022-09-09 22:03:44
4801
1
原创 全屋网络覆盖方案笔记
AC+AP早期仅用在车站、商场、企业,除了价格贵之外,它的配置操作也比较复杂,所以不适合家庭使用。因为不同厂家的Mesh技术是不一样的(就像TP-LINK的易展Mesh组网和华硕的Aimesh组网等等)AP分为胖AP(FAT AP)和瘦AP(FIT AP),胖AP功能和家用路由器差不多,瘦AP只有无线接入点的功能。AC通常是AC/POE路由一体机,即AC(AP控制器)+POE交换机(可以对网线供电的交换机)+路由器,该一体机直接和光猫连接。Mesh组网有 有线组网、无线组网、有线无线混合组网 三种方式。..
2022-08-25 19:28:23
4987
原创 两台电脑组建局域网进行有线传输的方法 (Mac ⇄ Windows)
moonlight有线串流。无线串流不敢把码率开太高,之前Windows有线连接路由器,Mac连WiFi,30码率,两分钟掉一次帧(本文要讲的)通过共享网络连接,成功连接后,两台电脑将组成局域网直接用两个电脑组建局域网,具体方法百度。目前知道的需要一头568a一头568b组交叉线(不过大部分网卡支持翻转),然后win的话会自动生成169的ip,可以用于通信两种方式(而不是通过路由器),进行直接有线传输。也可以把两台电脑都用网线连接路由器,进行间接(通过路由器)的有线传输。)...............
2022-07-19 16:58:16
13701
原创 【MacOS之SIP】SIP标识符restricted 和 取消SIP保护
文章目录前言restricted取消SIP保护最常用的 `csrutil disable`最安全的前言我尝试操作/bin目录下的文件,比如执行chmod 777 ./sh、mkdir test-dir,会发现报错Operation not permitted这是由SIP(系统完整性保护)引起的https://support.apple.com/en-us/HT204899在受SIP保护的目录中,我们无法进行创建文件、修改文件等操作restricted如果你使用ls -lO查看/u
2022-04-01 16:23:51
1573
2
原创 【MacOS之SIP】SnailSVN自定义svn路径:Operation not permitted
文章目录现象原因解决方案方案一(推荐)方案二解决办法三 (无效)现象原因这是由SIP(系统完整性保护)引起的https://support.apple.com/en-us/HT204899解决方案方案一(推荐)使用SnailSVN内置的svn,这是解决所有疑难杂症的有效方法其实还有一个错误会使自定义svn导致SnailSVN不可用:https://langui.net/snailsvn/#comment-45354这也需要使用内置的svn方案二将svn的二进制文件迁移到S
2022-04-01 15:56:41
1327
原创 GoLand利用plantuml生成UML类图
文章目录步骤1. 安装goplantuml2. 将goplantuml集成到GoLand3. 安装GoLand的PlantUML插件4. 安装和集成`Graphviz`GoLand内置的Diagrams不像IDEA一样强大,不支持生成类图解决方案是 利用github上的 适用于 golang 项目的 PlantUML 类图生成器:jfeliu007/goplantuml 结合Goland的PlantUML插件步骤1. 安装goplantuml执行go get github.com/jf
2022-03-24 17:47:24
8665
原创 mac、windows 设置终端代理
摘自:设置mac终端走代理使用包管理器的命令下载github的包时,会出现卡住的情况,大多是因为墙的问题执行以下两条命令。在终端关闭之前有效。端口在ssr里看export http_proxy="http://localhost:port"export https_proxy="http://localhost:port"还有一种更有意思的方式在~/.zshrc中添加以下内容# 为终端设置代理alias proxy='export all_proxy=socks5://127.0.0..
2022-02-21 17:57:51
3671
2
原创 【设计模式】状态模式和状态机的区别和联系
大多数资料、文章,都没有解释状态模式和状态机的关系,而是将这两个词混淆着使用。如果你有这方面的疑惑,希望本文能给你带来帮助。如果有描述不当的地方,也请帮忙指正以下并不涉及状态模式/状态机的基础内容,且均为个人理解比较好的,对该问题进行的讨论stackoverflow-What is the difference between a state machine and the implementation of the state pattern?The Super State Design .
2022-02-17 15:02:58
2238
1
原创 【MacOS】通过安装 Git 认识HomeBrew、Command line tools
通过安装Git认识HomeBrew、Command line tools
2021-12-27 02:30:11
3383
原创 goland:os.Executable()和os.Getwd()的区别以及配合goland的使用
关系如下。(不用多说了吧[doge])output是输出exe的路径,也就是os.Executable()得到的路径working directory是工作路径,也就是os.GetWd()得到的路径
2021-11-12 16:09:34
2458
原创 面向对象和面向过程的区别
文章目录程序设计和代码写法的区别其他为什么说Java是纯面向对象的为什么说go既是面向对象也是面向过程、或说既不是面向对象也不是面向过程?参考资料动画讲编程:C的面向过程和C++的面向对象有什么区别,大象装冰箱一个例子搞懂如何通俗易懂地举例说明「面向对象」和「面向过程」有什么区别?程序设计和代码写法的区别面向对象在程序设计上,以对象为中心去思考对象具有的行为在代码写法和表现上,函数通过对象调用,比如Person.Say("hello")。Person是对象面向过程:在代码写法上
2021-10-20 17:05:21
285
原创 【Linux杂记】图形用户界面(GUI)
Linux的可视化界面(GUI、桌面、桌面环境)是一个独立于系统的组件不过大部分Linux发行版的安装文件中都带有可视化界面,我们可以选择性地安装:在安装Linux系统时,如果选择"最小安装",就是没有可视化界面的。安装完成后也就只能通过shell进行对Linux的操作如果在安装时没有选择安装,也可以再通过shell进行安装。正是因为Linux的GUI独立于系统,所以出现了很多丰富的GUI供我们使用,比如Gnome、KDE、Unity、MATE、XFCE 等,它们都可以在大多数Linux发行.
2021-09-19 02:09:00
7730
1
原创 【SOAP-WebService系列】SOAP简述
文章目录SOAP是什么SOAP和HTTPSOAP是什么简述1:SOAP 是用于访问传统Web服务(SOAP-WebServices)的协议。简述2:SOAP=HTTP+XML+RPCSOAP(Simple Object Access Protocol,即简单对象访问协议) 是广泛用于SOAP-WebServices(传统Web服务)交换数据的一种协议规范。此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到 莲花(Lotus)、康柏(C
2021-08-23 23:40:09
5347
jetbrains IDE 自制主题
2020-02-02
为什么经常看到说某某语言支持闭包了,感觉很好的样子,但是平时都没有用到?
2021-01-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人