写作绅士,读作丧尸 X岛揭示板
 首页版规 |用户系统 |移动客户端下载 | 丧尸路标 | | 常用图串及路标 | 请关注 公众号:【矛盾苇草】| 人,是会思考的芦苇
常用串:·豆知识·跑团板聊天室·公告汇总串·X岛路标

No.63704741 - 计算机答题串 - 社畜


回应模式
No.63704741
名 称
E-mail
标题
颜文字
正文
附加图片

考试、升学、学业咨询、工作、投资、车房、养老、相亲 相关,请遵守>>No.50000001【全岛总版规】
养娃、带小孩相关请到育儿版,学习类打卡请到学业打卡
在匿名版张贴真实信息时请谨慎考虑,本站不对个人信息泄露引起的后果负责
投资风险与回报对等,请谨慎选择高回报率投资方式。

计算机答题串 无名氏 2024-09-08(日)13:12:19 ID:6S0Btd7 [举报] [订阅] [只看PO] No.63704741 [回应] 管理
po近期处于待业期,没什么固定的项目做,希望能够在答疑的过程强迫自己学习新的知识。
欢迎各位提问,也欢迎肥哥参与答疑串。

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

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

----------叠甲----------
人无完人,观点与知识也不尽然,po会尽量保证结论的可信度与逻辑性,若出现疏漏欢迎肥哥指正,望海涵。
无标题 无名氏 2024-09-08(日)13:41:02 ID:nBzPh6z [举报] No.63704993 管理
>>No.63704741
收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2024-09-08(日)14:03:50 ID:aAIV8Bg [举报] No.63705120 管理
肥哥请为我解惑,我因为业务需求刚刚接触数据库,为什么在大部分语言都可以创建并操作数据存储的情况下,还要专门设计“数据库语言”例如MySQL

jp猫猫
无标题 无名氏 2024-09-08(日)14:05:35 ID:et2ZbH6 [举报] No.63705123 管理
提问:
编程语言对硬件的操纵性到底是如何体现的?为什么说c语言对硬件操纵能力好?
无标题 无名氏 2024-09-08(日)15:24:48 ID:4tnsont [举报] No.63705773 管理
>>No.63705123
c对硬件操作性更好这种说法应该是指的跟内存交互更直接吧
最直观的例子就是老生常谈的指针
本质上是一串4字节或8字节长的虚拟地址,代表所指数据的起始地址,并不保存类型信息
实际上可以通过类型转换的方式用不同的方式解释同一块内存,也可以进行读写指定位或者指定字节这样的操作
c里面的union也算是内存操作更自由的体现吧

另外像Java和c#这种托管语言实际上一般是跑在虚拟机上的(JVM和CLR),跟硬件的“距离”自然没有c那么近
事实上C#想实现union这种功能就很困难
无标题 无名氏 2024-09-08(日)16:28:58 ID:g9NmlDm [举报] No.63706259 管理
>>No.63705120
同问(`・ω・)
无标题 无名氏 2024-09-08(日)16:31:37 ID:g9NmlDm [举报] No.63706281 管理
还有“环境”是什么意思——anaconda 装了一个星期都没搞明白原理的我如是提问( ゚∀。)
无标题 无名氏 2024-09-08(日)16:57:16 ID:C5A03Bf [举报] No.63706520 管理
>>No.63706281
我觉得就是anaconda给你建了一个放python环境的文件夹,然后你在ide中指定使用这个环境,那么运行程序时各种依赖都会到这个文件夹中去找,其实就跟你配置电脑的path环境变量是一样的
无标题 无名氏 2024-09-08(日)17:44:24 ID:Uu7dWdo [举报] No.63706936 管理
>>No.63705120
我的理解是(从Java角度来看):首先从本地缓冲出发,要是把数据放在本地缓存中,随着运行时间增大,数据量也会越来越大,导致性能下降。而且内存的有限性可能会导致内存溢出或者频繁的垃圾回收,进一步影响系统性能。从文件io流来看,Java文件操作,特别是文件的插入检索和修改的效率是很低下的,在文件尾部插入数据还好,要是插入文件中间或者是删除某些数据,修改某些数据,就需要重写文件了。在多线程的背景下,多线程访问文件的数据一致性,加锁后性能,线程阻塞等问题都很头疼。
大概是这么多吧,为什么使用某项技术,我的经验一般是从我不使用这个东西来实现会怎么样,效果对比怎么样来倒推,一般能推出大概,剩下的就是找另一个技术的特点。例如mysql的数据持久化,一致性,事务管理,并发控制,优化性能,特殊数据建模和关系,主从,分布式这些
无标题 无名氏 2024-09-08(日)17:56:52 ID:et2ZbH6 [举报] No.63707087 管理
>>No.63706281
打个可能不是很恰当的比方
你的电脑就是一张办公桌,你在上面干什么都可以。
但是没有工具你肯定是什么都做不了的,所以你在做任务前必须要准备工具,比如你需要搭一个大型的乐高,你就要有支架,部件,拆块器这样的东西。
“环境”就相当于你在电脑这个“桌子”上整理收纳各种工具的措施。因为到最后不是你在用这些工具,而是程序自动去搞这些东西,那么把一切都整理到同一套环境下就非常有必要。另外准备一个anacoda更多的作用就是这个环境内不会与外部干涉,同时不同的环境之间也能保证相对隔离
无标题 无名氏 2024-09-08(日)19:15:19 ID:6S0Btd7 (PO主) [举报] No.63707863 管理
>>No.63705120
首先要说明的是“先有数据库,再有数据库语言”。
所以以下会先聊数据库问题( ´∀`)

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

简单总结就是:
可以实现,但是别人设计的程序专精于数据存储领域,直接使用“数据库语言”实现数据库的即可,没必要投入重复实现已有的功能。
PS:题外话,实际上po工作过的较为大型的企业都会开发属于自己的数据库,因为大家对于数据的调用需求与方式不同,现有的数据库已经不满足他们的数据调用需求。
无标题 无名氏 2024-09-08(日)19:44:11 ID:6S0Btd7 (PO主) [举报] No.63708289 管理
>>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语言比其他的语言“更低级”,它几乎只是汇编语言的简单封装,所以“翻译”成机器语言的路径更短。
那么如何简单判断语言是否“低级”呢,我们可以通过语言的解析流程与可读性去分析,通常可读性越低的语言,性能越高。
因为通常对人类来说易读的东西,对机器来说很难理解,但是对机器来说易读的东西,对人类来说很难理解。

所以如果肥哥想分析自己学习的语言“效率”如何,可以通过分析其转化为汇编语言期间需要的路径来实现简易分析。| ω・´)
无标题 无名氏 2024-09-08(日)19:57:05 ID:6S0Btd7 (PO主) [举报] No.63708441 管理
>>No.63706281
我看了一下前两位肥哥的解释,已经蛮清楚的了,有解释也有例子。(*゚∇゚)

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

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

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

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

可以理解为一种属于计算机的“黑话”,翻译出来太长大家懒得说罢了|∀` )
无标题 无名氏 2024-09-08(日)20:01:38 ID:6S0Btd7 (PO主) [举报] No.63708504 管理
多谢肥哥的提问,让我复习了一下计算机原理与软件工程原理。
目前没有新的问题,我直接进行一个dota2的启动!( ゚ 3゚)
无标题 无名氏 2024-09-08(日)20:04:06 ID:8lvP2xW [举报] No.63708522 管理
刚好有个疑惑,但偏AI乃至数学一点
最优化中,损失函数可以写成有限和finite sum的形式是怎么个事
f(x)=\frac{1}{n}\sum_{i=1}^{n}f_i(x)
为啥要这么表示,对这种问题SGD中采样的到底是样本还是函数
无标题 无名氏 2024-09-08(日)20:05:44 ID:YWyzQRs [举报] No.63708539 管理
>>No.63708504
肥哥,Windows sever 2019是啥系统啊
无标题 无名氏 2024-09-08(日)20:05:49 ID:8lvP2xW [举报] No.63708541 管理
>>No.63708504
巧了,我写完问题也dota2启动了( ゚∀。)7
无标题 无名氏 2024-09-08(日)20:06:45 ID:YWyzQRs [举报] No.63708547 管理
>>No.63708504
自己做视屏补帧,算法要求win7/win10,但常用的云服务商只提供Windows sever2019
无标题 无名氏 2024-09-08(日)20:09:36 ID:WdimWUU [举报] No.63708578 管理
po,我之前出于个人兴趣自学了点java,想知道如果自己想开发游戏的话有必要另外另学一种语言吗( ゚∀。)
无标题 无名氏 2024-09-08(日)22:16:50 ID:6S0Btd7 (PO主) [举报] No.63710010 管理
>>No.63708522
迟来了三分钟但是需要等很久,这就是缘分( ゚ 3゚)

这个问题描述没太看懂具体要问的目的,我理解为:
希望知道对这个损失函数进行SGD,这个SGD采样的目标是样本还是函数。
不知道这样理解是否正确。

我把这个问题送给我AI在读的朋友了,回答会迟一些。
AI属于我的盲区( ・_ゝ・),我顺便学习一下。

UP主: