自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 解析Pinterest公司的系统架构设计

数据库集群是将多个单独的数据库实例或服务器连接到您的系统的过程。在大多数常见的数据库集群中,多个数据库实例通常由一个名为主服务器的单一数据库服务器管理。在系统设计领域,实施这种设计可能是必要的,尤其是在大型系统(Web 或移动应用)中,因为单个数据库服务器无法处理所有客户请求。为了解决这个问题,将引入多个并行工作的数据库服务器的使用。不言而喻,采用这种技术可为我们的系统带来众多好处,如处理更多用户和克服系统故障。这种实施的主要缺点之一是引入了额外的复杂性。

2024-06-06 14:44:32 1218

原创 音频数据上的会话情感分析

音频文件一次最多只能上传 5MB(5,242,880 字节)。因此需要分块上传数据,然后在服务端合并这些块。因此您无需担心处理大量 URL。

2024-06-05 21:10:45 1087

原创 CPU(中央处理器)的类型及 CPU 的工作原理是什么?

CPU 是计算机的大脑。所有计算机都利用它来分配和处理任务,并管理操作活动。中央处理器(CPU)类型由其数据处理芯片命名。目前市面上有各种处理器和微处理器可供选择,新的强大处理器不断开发。CPU 性能使计算机能够多任务处理。在介绍 CPU 类型之前,我们需要先定义某些关键术语。

2024-06-04 15:22:22 1034

原创 什么是 NPU?NPU 与 GPU 与 CPU 的区别

这能为开发人员提供加速使用生成式人工智能的应用程序的能力,主要重点是简化开发和部署流程,覆盖全球数十亿由高通和骁龙平台驱动的设备。利用每个处理器的能力,比如以人工智能为中心的定制神经处理单元(NPU),与中央处理单元(CPU)和图形处理单元(GPU)一起工作,每个处理器在不同的工作领域都表现出色,这是通过使用处理多样性的异构计算架构实现的。例如,中央处理器(CPU)负责顺序控制和即时性,图形处理器(GPU)负责流式并行数据,神经处理器(NPU)负责基本人工智能任务,包括标量、向量和张量运算。

2024-06-04 14:56:03 1055

原创 为什么我们需要那么多编程语言

在数百种编程语言,你可能会想知道为什么我们需要这么多,以及一个通用语言是否足够。事实是,不同的语言有不同的用途,每种语言都有其自身的优势、劣势和独特特点,使其适用于特定任务、行业和开发者偏好。

2024-06-03 15:09:48 983

原创 从JS角度直观理解递归的本质

让我们写一个函数pow(x, n),它可以计算x的n次方。换句话说就是,x乘以自身n次。有两种实现方式。迭代思路:使用for当pow(x, n)n == 1pow(x, 1)xpow(x, n)xnpown1这是一个很简单的例子,我们从直觉上很容易理解递归,但是有很多人会有一种不可名状的困惑,这个问题可以总结为“为什么会这样?现在我们来研究一下递归调用是如何工作的。为此,我们会先看看函数底层的工作原理。有关正在运行的函数的执行过程的相关信息被存储在其 执行上下文 中。

2024-06-01 17:50:30 921

原创 为何限定项目的 Node.js 版本

首先区分三个概念nvm,npm,nodejs。限定项目运行所需的 Node.js 版本可保证项目在一个稳定可预期的环境中运行,减少不必要的故障。甚至有些依赖库只能工作于某些版本下。同时,不加以限制的话,在多人合作的项目中恐怕会引起环境不一致带来的兼容性问题,部署上也会存在相同的问题。

2024-05-30 15:08:03 972 2

原创 git远程仓库限额的解决方法——大文件瘦身

Git作为世界上最优秀的分布式版本控制工具,也是优秀的文件管理工具,它赋予了项目成员对项目进行远程协同开发能力,因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台,比如国内的Gitee,国外的Github,也都是以Git为核心操作。

2024-05-27 12:14:01 667

原创 Mac为什么环境配置比Windows复杂?以nvm为例

包管理器:macOS 没有内置的包管理器,因此用户通常需要安装第三方工具,如 Homebrew,以便更轻松地安装和管理软件包。而在 Windows 中,环境变量通常通过系统设置中的 "环境变量" 对话框来配置。包管理器差异:首先在安装层面,对于Windows只需要一个简单的命令,而对于mac需要先下载包管理器(常用homebrew);尽管 macOS 的配置过程可能稍微复杂一些,但它提供了更大的灵活性和对开发环境的控制力。shell环境差异:在使用的时候,Windows开箱即用,而对于mac,需要在。

2024-05-26 17:14:41 377

原创 python解释器选择

Virtualenv:简单、轻量,适合小型项目。Conda:功能强大,适合数据科学和需要多语言支持的项目。Pipenv:结合了pip和virtualenv的优点,适合中小型项目。Poetry:现代化的依赖管理和打包工具,适合希望简化项目管理的开发者。

2024-05-26 14:42:19 406

原创 代码设计的核心思想

将逻辑分层处理,不同层次之间有不同的职责,不存在跨层访问,从而降低耦合,职责清晰,容易拓展,容易复用。分层思想就是宏观的单一职责原则。每一层有自己的职责,也只负责自己的职责,每一层只使用上层的服务并向下层提供服务。最简单的例子就是计算机网络的五层协议,每一层协议只对下层负责,不会出现跨层访问的情况。那么,分层有啥好处呢?我们上代码。写完感觉美滋滋,代码良好运行,一点问题都没有。突然有一天,产品说要加个小窗功能,小窗的情况下页面不存在,但是声音和逻辑都在。

2024-04-26 19:51:14 859

原创 浅谈三例设计模式

设计原则是总纲,设计模式就是具体的实现。我们来深入了解下常见的设计模式,来看一看设计原则是怎么具像化的。

2024-04-26 19:33:34 750

原创 代码设计规范的六大原则

设计模式不是必须的,但是如果你的代码是“非一次性的”,那么它就是必须的。对于大多数开发者来说,代码都是需要维护的,而不是写一遍就放起来不管了。既然需要维护,就要不断地读读改改,那就不是一次性的,那么怎么让他“读读改改”起来方便些呢?设计模式!设计模式切记不要死记硬背,不要生搬硬套,否则不如不学。想好了怎么写,选择哪种设计模式;如果没有合适的,套不进去,那就别套了,只要方便维护,就是好的设计,不一定非要去套现有的设计模式。当然,要想正确地使用设计模式,还是先得透彻地了解了它们。

2024-04-26 16:51:33 1187

原创 网络优化的实践

本章从实践角度讲解了网络请求的优化,核心就三点:尽量不请求,尽量少请求,尽量提前请求。尽量不请求:使用缓存避免无用请求。尽量少请求:使用数据细化、数据压缩、数据共享等方式减少请求次数。尽量提前请求:使用预判加载和提前加载减少用户等待时间。

2024-04-26 16:07:20 452

原创 一文搞懂计算机网络

计算机网络可以分为:广域网、城域网、局域网和个人区域网。广域网:覆盖几十到几千公里,比如我们日常说的上网,用百度、谷歌等,用的就是广域网。城域网:一般覆盖一个城市,大约 5 到 50 公里,比如有的城市的宽带。局域网:一般覆盖一公里左右,比如一个公司的内网。个人区域网:覆盖范围只有几米,比如自己给自己开热点。有人说,这些我都不在乎,我就在乎它快不快,看视频卡不卡,这就要提到网络的质量参数了。判断一个网络的质量有 7 个性能指标。速率:这个很好理解,就是传输速度。

2024-04-26 15:52:35 1127

原创 一文搞懂操作系统

计算机的组成元件都是些冷冰冰的硬件,就像人体的躯干一样,而软件才是计算机的灵魂。我们把软件分为系统软件和应用软件,操作系统就是系统软件的一种,只不过它是最基础的软件,其他所有软件都要运行在操作系统上。那软件是什么呢?简言之,软件就是程序的载体。我们写的hello world等代码,打包出来就是软件,就能安装在各种设备上,然后运行在操作系统上。那操作系统又是啥呢?凭什么让它管理我写的软件呢?我们就来了解下。

2024-04-26 14:54:14 922

原创 软件开发中的MVC架构

MVC 代表 Model-View-Controller。它是一种架构或软件设计模式,使创建大型应用程序变得简单。它不属于特定的编程语言或框架,而是一个概念,您可以在任何编程语言中创建任何类型的应用程序或软件时使用它。例如,如果您正在使用 PHP 开发应用程序,您可以使用像 Laravel 或 Codeigniter 这样使用 MVC 架构的框架来帮助您快速简单地开发应用程序。如果您以前创建过没有使用任何架构或框架的非常简单的应用程序,那么一开始可能会对 MVC 结构感到有些困惑。

2024-04-26 14:03:29 754 2

原创 几个数据结构的设计实现原理

我们讲了常见数据结构的实现原理,我们没有讲任何 API,就单纯从它们的特点来设计这些数据结构,我们不必拘泥于它们的源码是怎么写的,只要明白其中的道理,写出工程性源码不过是时间问题。对于顺序表,因为是顺序的,我们就可以用数组来模拟实现,这样就可以通过下标快速定位元素。对于链表,因为是分散的,我们就可以用一个一个的节点来实现,然后通过持有下一个节点的引用把它串联起来。对于栈和队列,实现方案有多种,我们只要理解挪移的方向即可。单端存外删内,双端都向存。

2024-04-26 13:38:16 716 1

原创 两个角度实现一个简单的直播间功能

面向过程适合注重性能的,不注重拓展性的,看重当前的,不看重未来的场景。现在让我们写一个具体需求:我要开发一个直播间,直播间有很多消息,我需要将这些消息进行唯一标记,为了避免刷屏,对同一个人的消息,如果消息的内容相同,那就将它们视为同一个消息。OK,需求有了。消息要有唯一标记,这就要用到发消息人的 id,以及消息的内容了。

2024-04-26 12:56:06 718

原创 深入解析面向过程与面向对象

代码是由我们写的,写完后就交给编译器去编译为电脑认识的东西,然后电脑再把它放到 CPU 里面去高速执行,最后再将结果展示给我们。这里面涉及到两次视角转换:一次是我们将写的转换为电脑认识的;一次是电脑执行完后转换为我们认识的。换句话说就是:我们写的代码是面向我们的,编译为电脑执行的代码就是面向计算机的。正如下图所示:我们发现,人看的东西很直白,但是效率又很低;而电脑看的东西则根本无法读懂,但是效率又很高;那么怎么让人容易看明白,电脑执行起来又高效呢?这就涉及到一个问题:面向对象和面向过程。

2024-04-26 12:30:54 839

原创 从CPU的角度看代码优化

我们先来看条件语句的优化,我们知道,条件语句只有两种:if-else和switch。

2024-04-26 11:35:59 634

原创 数据结构的时间与空间优化

有人说,这些数据类型都不满足我啊,怎么办呢?这时候你就可以使用自定义数据类型了,也就是类。比如,现在我有辆车,车又不是 int 类型的,也不是 String 类型的,嗯,那我就定义一个类型,这个类型就叫做“车”。那么,怎么使用呢?int a;Car car;没啥区别,其实对于电脑来说就是:一个类型,一个变量,不管你是啥,你只要是这个原则,我照单全收。刚刚我们说到,数组的缺点是扩容难,那么既然我们都可以自定义数据类型了,我们能不能定义一个扩容简单的呢?当然可以!

2024-04-25 20:14:30 635 5

原创 用二进制实现各种基础代码逻辑

比如:我要取一个 8 位数的高 4 位,那么我就让它和 1111 0000 进行按位与运算,这样,它的低 4 位一定都是 0,高 4 位原来是 1 还是 1,原来是 0 还是 0,这样也就等于:消除了它的低 4 位,只取它的高 4 位。这就是二进制的神奇之处。比如,上述的0111>>1,因为最低位的 1 被移出去了,就变成变为 011,又因为符号位为 0,所以高位补 0,就变成了 0011,也就是 3,而原来的 0111 是 7,对于整型来说:7/2=3,等于除以 2。计算了下是,而且也是 svip。

2024-04-25 19:01:24 626 1

原创 二进制如何优化代码性能

人的年龄很少超过 120 岁,而一个 byte 最大表示 127,我们用一个 byte 就能表示年龄,一个 byte 是 8 位二进制,那就是说,我们只需要 9 个二进制位就能表示人的年龄和性别。所以我们写的代码要有个编译过程,Java 语言的这个过程的产物就是字节码文件,这个文件要尽可能紧凑,尽可能小,那么上述的小题就不大做了。计算机的底层是基于晶体管实现的,可以简单地理解为一组开关,打开就表示 1,关闭就表示 0,所以,采用二进制的话,计算机只需要简单地打开/关闭这些开关即可。但是,这不是最省的。

2024-04-25 18:17:42 562 2

原创 白话tSNE原理与一些实践细节

假设一个以数据点 𝑥𝑖为中心,半径为 r 的 m 维球(二维空间就是圆,三维空间就是球),其体积是按 r 的 m 次方增长的,假设数据点是在 m 维球中均匀分布的,我们来看看其他数据点与𝑥𝑖的距离随维度增大而产生的变化。从图中可以看到,随着维度的增大,大部分数据点都聚集在 m 维球的表面附近,与点𝑥𝑖的距离分布极不均衡。较大的perplexity值会关注数据的全局结构,产生更大范围的吸引力,数据点会更加紧密。较小的perplexity值会关注数据的局部结构,产生更小范围的吸引力,数据点会更加松散。

2024-04-23 16:48:35 748 1

原创 两段话清晰解释langchain

每个能力的调用都是很简单的代码逻辑,但这也不是必须的,因为你也可以从底层开始做,比如你可以一句一句地把流式输出的逻辑写出来。与此类比的是,不用react框架也可以纯写JavaScript,但是你会失去很多成熟的组件调用。

2024-04-23 14:27:14 126 1

原创 JavaScript异步编程白话

这意味着,当一个任务正在执行时,其他任务必须等待,尤其是那些耗时的操作(如网络请求、文件读写、长时间计算等),如果同步执行,将会阻塞主线程,导致用户界面无响应(UI freeze)。事件循环是一个持续运行的机制,它负责管理任务队列(Task Queue)和微任务队列(Microtask Queue),并按特定规则调度这些任务的执行。(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件,于是那些对应的异步任务结束等待状态,进入执行栈,开始执行。

2024-04-22 21:53:55 503 1

原创 哈希表介绍

其核心理念是通过使用特定的数学函数——哈希函数,将任意大小和类型的键(Key)转换成固定大小的数值(通常是整数),然后利用这个数值作为索引来直接访问数组中的某个位置。- 链地址法:在每个哈希桶处维护一个链表(或其它可链接的数据结构),用于存储具有相同哈希值的键值对,当发生冲突时,新的键值对被添加到对应位置的链表末尾,查找操作需要遍历链表来找到匹配的键。- 随着哈希表中数据的增加,为了维持良好的性能,可能需要调整哈希表的大小(即数组容量)。-当要将一个新的键值对插入哈希表时,首先使用哈希函数计算键的哈希值。

2024-04-22 20:04:00 278

原创 Tampermonkey指南

Tampermonkey——让每个人都可以轻易编写浏览器脚本

2024-04-22 15:44:21 399

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除