那些共性的技术思想

2024-05-06 17:32
文章标签 共性 思想 技术

本文主要是介绍那些共性的技术思想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     从嵌入式,linux内核->机器学习(1个多月)->glusterfs->kvm ,openstack,网络->docker生态,到现在决定以后方向为golang后端开发+机器学习,数据挖掘, 出于各种原因,各种考量,大体方向总是变来变去,真心感叹伤不起,也侧面反映我先前还是属于半迷茫阶段,毕竟选择方向也可以理解为投资未来。
     反省下,方向的频繁转变,那之前学的是否是白学了呢?  去掉那些各个领域的逻辑,到底学了什么了。终结下来,其实还是有很多共性很多东西底层思想都一样不管何领域都会使用到。个人觉得,根本原因是 在基础架构没变,都是跑在图灵机机情况下,遇到的问题很多都是共性的,解决的方法思路当然也就相似,这个不会随着开发语言,平台而改变,只不过实现的差异罢了。
  当然,无论如何,不是往一个领域方向专一研究,总是伤不起的,没有真正的核心竞争力。

高并发: 协程  epoll

     epoll  :无论golang的sysmon线程监控网络,nodejs的非阻塞式回调机制(观察者模式),还是python的evnetlet ,glusterfs分布式文件系统进程之间的通信,看它们的原理,都会看到epoll的影子,毕竟一切都依赖系统嘛。
     协程:线程切换,是系统的工作,开销比较大, 而协程是用户态,通过栈来实现,不用切换到内核态,按需动态创建资源,可见更加的灵活高效,  如何利用好多核,进一步提高并发,这就看实现了。
 相关链接: goroutine背后的系统知识| sizeof(void)   

 锁问题  

 需要锁的最根本必要条件:(1)资源共享,(2)并发:
 而频繁用锁,锁的范围越大,性能就越影响,不用锁也就需要打破这两条中的一条即可:
     并发条件失效:为啥nodejs没有锁的库,通过非阻塞,单线程方式, 但是缺点 就是不能利用好多核的优点了。
    资源共享条件失效:如果不用锁机制的话,全局表下常见方式就是通过一个线程分配独立的空间。像内核的CPU变量,软中断的tasklet都是通过绑定到独立的cpu上,也算解除了并发的条件。 
 

 缓存,  性能  ,一致性  ,CAP理论

   从应用层到, 基本就是哪有IO,哪有就有缓存。缓存好处不用多说,主要就是提高性能嘛。凡是都有两面,提高性能的对面那就是一致性的问题 ,因此,再加一句,哪有cache,哪就有一致性问题,尤其对于分布式系统来说。对于搞存储的,我想CAP理论就并陌生了,多副本情况下,在性能,可用性面前,也就有强一致性和最终一致性的抉择。
    so 。凡事都是相对的,,当你获得了什么,批判性想想有没牺牲掉什么,最后来个折中。
相关链接:     

CAP理论1  Introduction to Distributed System Design CAP理论2     酷壳 – CoolShell.cn 相关blog


 空间换时间思想

我想这是最常见最常用的重要思想,无论以上的说的缓存,还是以下说的内存管理,hash思想 ,算法中的动态规划 ,都属于这是范围。
 哪有性能要求几乎也都能看到这身影。

内存管理 :减少系统调用

   那些注重性能的,基本都自己的内存管理机制,多数采用技术也是malloc/map+ hash 。毕竟频繁调用系统接口伤不起,而基础软件很多要求高性能,看golang,redis 都基于tcmalloc,先map大块内存,再自己管理;glusterfs自己的mem_pool;内核的slab机制。。。。
      可以看高性能的基础软件通常通过自己管理内存,最根本原因就是尽量减少系统调用, 这也就很好解释为什么一些软件会消耗那么大内存了,(eg:golang ,redis, mongdb )

分而治之思想

      化整为零,拷贝网络一段解释:任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题规模越小,解题所需的计算时间往往也越少,从而也越容易计算。想解决一个较大的问题, 有时是相当困难的。分治法的思想就是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。找出各部分的解,然后把各部分的解组合成整个问题的解。
     例子:1.对于那些不能一次性载入内存的大文件进行排序,基本思路拆分成小文件快速排序,然后再归并排序了;像现在大数据处理MapReduce ;更广义,数据分片传输,再合并;大文件分片存储在不同节点上,访问时候再从各个节点上获取, 我想在大数据时代下,,分而治之思想也很常见的。
  相关链接:海量数据处理:十道面试题与十个海量数据处理方法总结

简单唯美  

大道至简,无论解决问题,还是理论。感觉有些只可意会不可言传。

二八定律

       

编程思想

《深入浅出设计模式》就总结的很好了:
   封装变化(抽象!!) 
   多用组合,少用继承。   
   针对接口编程,而不针对实现编程。
    我觉得这本书所说的基本原则中,最基本的就是这3条了,其他原则,设计模式都能看到影子,扩展出来的。 我想只要很好理解,实践这3条,就比较容易写出灵活,扩展性好,维护性好的代码框架来吧。
     并且,就算没见过这本书,也能自然而然的写出能找到对应设计模式名的代码,毕竟设计模式更确切的称呼是常见的“编程经验”。
   就好比下象棋久了,然后再给你看给新手的棋谱,估计都有这样的想法:原理我这样的下法还有这么高大上的名字啊。
      现在想想,相对于其他传统的面向对象语言(c++,python等等),golang不就很好的精简的体现了3条,这才是面向对象的最简公式,简单唯美!

ps: 还是强烈推荐 酷壳 – CoolShell.cn  ,每次看,都有不同的感悟,感慨。毕竟是牛人的多年经验,总结。

ps :哪有理解错误,望指出,谢谢!

这篇关于那些共性的技术思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964917

相关文章

二叉树遍历(思想)

根据一棵树的先序/中序遍历,或者后序/中序遍历序列,都可以唯一地确定一棵树,算法如下: 首先根据前序遍历或后序遍历的第一个或最后一个为根结点根据根节点可以在中序遍历中分出左子树部分和右子树部分根据前序/后序遍历的其他节点及中序遍历的左右两部分重复上述两步骤即可 遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列,得到二叉树中结点的先序序列、中序序列或后续序列。这实质上是对一个非线性结

[muduo网络库]——muduo库EventLoopThread类(剖析muduo网络库核心部分、设计思想)

接着之前我们[muduo网络库]——muduo库Thread类(剖析muduo网络库核心部分、设计思想),我们接下来继续看muduo库中的EventLoopThread类,它和Thread类息息相关。 EventLoopThread类 封装了eventloop线程也就是IO线程,eventloopthread会启动自己的线程,并在里面运行eventloop::loop()。 重要成员变量

Elasticsearch:向量相似度技术和评分

作者:来自 Elastic Valentin Crettaz 当需要搜索自由文本并且 Ctrl+F / Cmd+F 不再有效时,使用词法搜索引擎通常是你想到的下一个合理选择。 词汇搜索引擎擅长分析要搜索的文本并将其标记为可在搜索时匹配的术语,但在理解和理解被索引和搜索的文本的真正含义时通常会表现不佳。 这正是向量搜索引擎的闪光点。 他们可以对同一文本进行索引,以便可以根据它所代表的含义及其与具

大模型时代,交换机技术演变、性能分析、衡量指标

OSI协议及在高性能计算中向RDMA的过渡 协议是为计算机网络内的数据交换而建立的一组规则、标准或协议。在法律层面,OSI七层协议被视为国际标准。该协议于20世纪80年代引入,旨在通过其七层网络模型标准化计算机间通信,以满足开放网络的要求。 物理层规定硬件之间的通信方式,并为物理设备(包括接口类型和传输速率)建立了标准,便于传输比特流(由0和1表示的数据)。 数据链路层主要负责帧编码和错

白盒测试技术和黑盒测试技术

白盒测试技术是一种软件测试方法,其核心思想是对程序的内部逻辑结构进行详尽的了解和分析,以此为基础设计测试用例。这种方法要求测试人员能够查看和理解被测试软件的源代码,从而能够直接测试代码的执行路径、分支、循环、函数调用等内部细节。以下是一些主要的白盒测试技术: 语句覆盖:确保程序中的每一条语句至少被执行一次。这是最基本的覆盖标准。 判定覆盖(分支覆盖):每个逻辑判断的每个可能的结果至少被执行一

动作捕捉、表情捕捉技术:高效率打造高品质数字人角色动画

#行业现状# 动作捕捉与表情捕捉技术作为当代影视动画制作的重要技术手段,已被广泛应用于各领域,如文旅宣传片、非遗文化传承表演动画、裸眼3D动画、程序动画、音乐舞蹈MV动画、游戏买量动画、虚拟主持人动画等等,通过动作捕捉与表情捕捉技术将真人演员的表演内容一一呈现于数字人上,极大地增强了动画的观赏性和视觉表现力,更能符合当代审美需求。 广州虚拟动力一直深究于动作捕捉技术领域,致力于为各领域

技术前沿 |【大模型LLaMA:技术原理、优势特点及应用前景探讨】

大模型LLaMA:技术原理、优势特点及应用前景探讨 一、引言二、大模型LLaMA的基本介绍三、大模型LLaMA的优势特点五、结论与展望 一、引言 随着人工智能技术的飞速发展,大模型已成为推动这一领域进步的重要力量。近年来,大模型LLaMA以其卓越的性能和广泛的应用前景,受到了业界的广泛关注。本文旨在深入解析大模型LLaMA的技术原理、优势特点以及可能的应用场景,以期为相关领域

不懂技术可以当项目经理吗?看完这篇你就知道了

项目经理作为项目的核心负责人,主要负责项目的规划、组织、协调和控制。 如果你不懂技术,但具备出色的项目管理技能,你仍然可以成功地管理项目。你可以通过与技术团队建立紧密的合作关系,明确项目需求,并依赖技术团队的专业知识来评估项目的可行性、进度和资源需求。 然而,不懂技术可能会带来一些挑战,例如:在与技术团队沟通时,你可能需要花费更多的时间和精力来理解技术细节和潜在问题;如果你无法对技术方案进行评

[muduo网络库]——muduo库InetAddress类(剖析muduo网络库核心部分、设计思想)

接着之前我们[muduo网络库]——muduo库EventLoopThreadPool类(剖析muduo网络库核心部分、设计思想),我们接着看完除去TcpServer的最后一个InetAddress类。InetAddress 类是 muduo 网络库中的一个重要类,用于表示网络中的 IP 地址和端口号。 InetAddress类 用于表示网络中的通信实体的地址信息,例如服务器地址、客户端地址等

轻蜗牛直租平台-技术中间件选型介绍

背景:有做租房平台这个想法的时候还有点小激动,也筹划了很久。对于各种中间件的技术选型也有一些想法。也希望通过这个项目区提高自己的综合实战能力。同时现在也打算跟一些小伙伴一起开发这个项目。目前处于起步阶段。为了项目的顺利迭代现在把技术中间件和springclou的版本统一说明一下。 一、存储 存储这块目前应用到了MySQL5.7作为DBMS系统。由于有房源信息的检索,需要搜索引擎的支持,因