回应模式 - No.63704741


No.63704741 - 社畜


计算机答题串无名氏No.63704741 只看PO

2024-09-08(日)13:12:19 ID:6S0Btd7 回应

po近期处于待业期,没什么固定的项目做,希望能够在答疑的过程强迫自己学习新的知识。
欢迎各位提问,也欢迎肥哥参与答疑串。

----------告示----------
答疑的效率不高,所以希望肥哥别问需要很强的及时性的问题。
例如:
>xxx题用什么算法解决。
>我这里有个报错,如何解决。
这类的问题,没有测试环境很难解答,这也是为什么本串放在了老中医而不是代码串。

本串主要用于解答相对抽象的概念,或者对计算机的“质疑”与“好奇”。
例如:
>为什么计算机使用的是二进制而不是三进制,分明三进制的单位信息存储量更大。
>如何看待AI发展对计算机行业的冲击,未来就业会更困难吗?
po会尽量去吸取相关的知识,汇总后进行分析解答。
提出问题过一段时间来收获结果就好。

----------叠甲----------
人无完人,观点与知识也不尽然,po会尽量保证结论的可信度与逻辑性,若出现疏漏欢迎肥哥指正,望海涵。

无标题无名氏No.63707863

2024-09-08(日)19:15:19 ID: 6S0Btd7 (PO主)

>>No.63705120
首先要说明的是“先有数据库,再有数据库语言”。
所以以下会先聊数据库问题( ´∀`)

肥哥提到了效率问题。>>No.63706936
>关于效率问题的基本解释
大多数情况下越高级的语言在实现某项功能时会有更差的执行性能。
原因是高级语言通常是由低级语言实现的,在低级语言形成高级语言的过程中,会添加较多的“降低出错概率”的检测机制,相关机制增强了高级语言的可读性,但是添加了这些“步骤”的情况下,语言的“直接运行效率”就会受到影响。
效率先简单聊一下,如果觉得不太清楚可以追问,我会详细解释效率降低的原因。
>关于“为什么大部分语言可以实现数据创建与存储,还要专门设计`数据库语言`。”
这里分为三点解释。
1.为什么设计数据库而不是直接进行数据存储。
在进行数据存储时,我们并不是简单的“存进去”就好了,在实际的实现中,需要考虑程序的时间复杂度与空间复杂度等相关问题。(相关参考学科为:软件工程原理)
如何更快的查询到某一个具体数据,在数据量较低的情况下,差异是不明显。
但当数据体量达到了是十亿百亿级别,百分之一的差异也是极其显著的,能够明显降低存储与查询成本的。
那么如何快速的进行查询,简单的进行存储就是一门较为高深的学科,而数据库就是一群精于此学科的人,设计出来的效率较高的数据存储软件,这是数据库的产生原因。
2.为什么设计“数据库语言”。
能够理解问题1的情况下,本问题就很好解答了。
设计出来的程序如何调用?
这就需要有“数据库语言”来实现,相当于提供了一个统一的数据调用接口,只不过它有一定的解析能力,让你看起来像是“数据库语言”罢了,实际上是符合特定结构的调用指令,和肥哥平常自己写的代码,对外提供的接口没有区别。
3.那么我们是否可以其他语言去实现数据库的功能呢?
答案是可以,但是没必要。
计算机是一个庞杂的学科,我们不可能精通于其中的每一项工作,那么直接使用其他顶尖人才创建好的现有产品,是一个很简单的降低我们开发成本的行为。
我们没必要投入过多精力到“开发一个存储数据的模块”这件事上去,让更多的精力聚焦于我们想要实现的功能,这就是相互调用与模块化的意义。

简单总结就是:
可以实现,但是别人设计的程序专精于数据存储领域,直接使用“数据库语言”实现数据库的即可,没必要投入重复实现已有的功能。
PS:题外话,实际上po工作过的较为大型的企业都会开发属于自己的数据库,因为大家对于数据的调用需求与方式不同,现有的数据库已经不满足他们的数据调用需求。

无标题无名氏No.63708289

2024-09-08(日)19:44:11 ID: 6S0Btd7 (PO主)

>>No.63705123

可以先看一下:
>>No.63705773 后半段 与>>No.63707863的“关于效率问题的基本解释”
这两个解释思路相似,即大多数“高级语言”并不直接作用于硬件,而C距离硬件相对近一些。
以下为相对详细的解释。
>编程语言对硬件的操作性到底是如何体现的
这里其实是肥哥对于“编程语言”的定义认知不够清晰导致的。
我们对“编程语言”简单分类可以分为三类。
机器语言:作用于硬件,机器可以“直接理解”运行的语言,无需编译,在硬件中已经写好了对应的运行逻辑。

低级语言:通常是指汇编语言,微处理器与微控制器等,对应不同的机器语言集,也就是说可以通过微处理器翻译成硬件再让硬件“理解”。

高级语言:即“高度封装的编程语言”。C、python、java、golang、rust等皆在此列,但是高级语言中也有“相对低级”与“相对高级”的说法,这个与语言的封装程度有关。
我们用python与C举例,相当多的python包的底层逻辑是使用C实现的,我们做一个极简的类比。(不绝对正确,只是方便理解。)
一个python程序要操作硬件。
步骤是python->c->汇编语言->机器语言。
一个C程序需要操作硬件。
步骤是c->汇编语言->机器语言。
可以明显的看到直接使用C会省去python-c的过程。

所以对于“编程语言对硬件的操纵性到底是如何体现的”这点,我们可以定义为“程序对于硬件的调用需要经过哪些步骤”,来抽象量化。

>为什么说C语言对硬件的操纵能力较好
能够理解上一个问题,这部分就好理解了,因为C语言比其他的语言“更低级”,它几乎只是汇编语言的简单封装,所以“翻译”成机器语言的路径更短。
那么如何简单判断语言是否“低级”呢,我们可以通过语言的解析流程与可读性去分析,通常可读性越低的语言,性能越高。
因为通常对人类来说易读的东西,对机器来说很难理解,但是对机器来说易读的东西,对人类来说很难理解。

所以如果肥哥想分析自己学习的语言“效率”如何,可以通过分析其转化为汇编语言期间需要的路径来实现简易分析。| ω・´)

无标题无名氏No.63708441

2024-09-08(日)19:57:05 ID: 6S0Btd7 (PO主)

>>No.63706281
我看了一下前两位肥哥的解释,已经蛮清楚的了,有解释也有例子。(*゚∇゚)

我来做一些直接解释的补充。
在计算机中,“环境”一词通常是指程序运行时需要的一系列条件与设置。
条件可能是网络条件、硬件条件、也可能是软件条件。
我们需要调整这些条件使得软件处于一个可以运行的“情景” 这种可运行“情景”,我们称之为“环境”。

所以“环境”可以简单的定义为“程序运行的情景”,而“配置环境”就是“调试情景”,目的是使程序处于可以运行的环境状态。

>举例
程序运行需要python环境。
解释为:程序需要运行在一个存在python应用并且系统知晓python应用的使用路径的情景下。

这样就是为什么我们需要下载python应用并且配置系统路径。

可以理解为一种属于计算机的“黑话”,翻译出来太长大家懒得说罢了|∀` )

无标题无名氏No.63708504

2024-09-08(日)20:01:38 ID: 6S0Btd7 (PO主)

多谢肥哥的提问,让我复习了一下计算机原理与软件工程原理。
目前没有新的问题,我直接进行一个dota2的启动!( ゚ 3゚)

无标题无名氏No.63708522

2024-09-08(日)20:04:06 ID: 8lvP2xW

刚好有个疑惑,但偏AI乃至数学一点
最优化中,损失函数可以写成有限和finite sum的形式是怎么个事
f(x)=\frac{1}{n}\sum_{i=1}^{n}f_i(x)
为啥要这么表示,对这种问题SGD中采样的到底是样本还是函数

无标题无名氏No.63708539

2024-09-08(日)20:05:44 ID: YWyzQRs

>>No.63708504
肥哥,Windows sever 2019是啥系统啊

无标题无名氏No.63708541

2024-09-08(日)20:05:49 ID: 8lvP2xW

>>No.63708504
巧了,我写完问题也dota2启动了( ゚∀。)7

无标题无名氏No.63708547

2024-09-08(日)20:06:45 ID: YWyzQRs

>>No.63708504
自己做视屏补帧,算法要求win7/win10,但常用的云服务商只提供Windows sever2019

无标题无名氏No.63708578

2024-09-08(日)20:09:36 ID: WdimWUU

po,我之前出于个人兴趣自学了点java,想知道如果自己想开发游戏的话有必要另外另学一种语言吗( ゚∀。)