那些共性的技术思想

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

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.