获得徽章 0
算法就是函数,函数体就被解析成一条条指令存储起来;数据就用变量存储起来。
执行程序时,就是执行一条条机器指令叭函数体调用了变量怎么办,例如i++,你首先要去找到i叭,i存储在数据区,就去数据区找i,然后将i++;再回来,执行下一跳指令。
函数体调用了其他函数怎么办,首先,去代码区找函数,不像去数据区找变量那样,加个1就解决了叭,被掉函数很长怎么办,一时半会处理不完,那就先去代码区将被调函数拿出来放在函数调用(call stack)栈里(栈区),也要考虑被调函数的形参,这个变量也在数据区,你也要去从数据区读取出来,放在调用栈里。如果被调函数又调用了函数,那就再放入递归调用栈里。先入后出,当前执行的函数在栈顶。last-in first-out
执行程序时,就是执行一条条机器指令叭函数体调用了变量怎么办,例如i++,你首先要去找到i叭,i存储在数据区,就去数据区找i,然后将i++;再回来,执行下一跳指令。
函数体调用了其他函数怎么办,首先,去代码区找函数,不像去数据区找变量那样,加个1就解决了叭,被掉函数很长怎么办,一时半会处理不完,那就先去代码区将被调函数拿出来放在函数调用(call stack)栈里(栈区),也要考虑被调函数的形参,这个变量也在数据区,你也要去从数据区读取出来,放在调用栈里。如果被调函数又调用了函数,那就再放入递归调用栈里。先入后出,当前执行的函数在栈顶。last-in first-out
展开
评论
点赞
在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本质上都是一样的。
评论
点赞
总结一下,最长回文子串方法,1.暴力,O(n^3) ; 2.枚举对称轴,s[i]为对称轴,或者s[i-1]与s[i]中间为对称轴,然后进行中心扩展;3.动态规划,dp[i][j]表示i-j字串是否是回文串, 枚举l和r,当s[l] == s[r] && ( dp[l+1][r-1] 或者 r-l<2) 的时候,dp[l][r] =true。
评论
点赞
Go语言中的协程(Goroutine)是一种轻量级的线程,是Go语言并发编程的基本单位。协程在语言层面上提供了高效的并发处理方式,使得在一个程序中可以同时运行成百上千个协程,而且启动和切换的开销相对较小,使得编写高效的并发程序变得相对容易。
评论
点赞
静态链接(Static Linking)和动态链接(Dynamic Linking)都涉及到在编译和执行过程中,程序代码和库函数之间的关联。地址重定位(Address Relocation)则是指在链接过程中,将代码中的符号引用(比如函数、变量等)与实际的地址关联起来的过程。
1. **静态链接和地址重定位:**
在静态链接中,编译器将所有程序和库函数的代码合并成一个单一的可执行文件。在这个文件中,所有的函数和变量都在同一个地址空间中,编译器会在编译阶段将所有符号引用替换为实际的地址。地址重定位在这里就是确保所有的符号引用都指向正确的物理地址,因为在编译时就知道所有函数和变量的实际位置。
2. **动态链接和地址重定位:**
在动态链接中,程序在运行时并不会将所有的代码和库函数合并到一个单一的可执行文件中。相反,程序会在运行时加载所需的共享库(动态链接库或动态共享对象),这些库是独立于主程序的。地址重定位在这里是指在程序加载库函数时,操作系统或运行时库会将符号引用与实际地址关联起来。
在动态链接中,地址重定位是延迟进行的。当程序启动时,操作系统会加载主程序,然后在需要的时候再加载所需的共享库。因此,地址重定位会在库加载时进行,而不是在编译阶段。
总结来说,静态链接时地址重定位是在编译阶段完成的,而动态链接时地址重定位是在程序运行时加载库时完成的。动态链接允许多个程序共享一个库,减小了可执行文件的大小,但需要在运行时处理地址重定位。
1. **静态链接和地址重定位:**
在静态链接中,编译器将所有程序和库函数的代码合并成一个单一的可执行文件。在这个文件中,所有的函数和变量都在同一个地址空间中,编译器会在编译阶段将所有符号引用替换为实际的地址。地址重定位在这里就是确保所有的符号引用都指向正确的物理地址,因为在编译时就知道所有函数和变量的实际位置。
2. **动态链接和地址重定位:**
在动态链接中,程序在运行时并不会将所有的代码和库函数合并到一个单一的可执行文件中。相反,程序会在运行时加载所需的共享库(动态链接库或动态共享对象),这些库是独立于主程序的。地址重定位在这里是指在程序加载库函数时,操作系统或运行时库会将符号引用与实际地址关联起来。
在动态链接中,地址重定位是延迟进行的。当程序启动时,操作系统会加载主程序,然后在需要的时候再加载所需的共享库。因此,地址重定位会在库加载时进行,而不是在编译阶段。
总结来说,静态链接时地址重定位是在编译阶段完成的,而动态链接时地址重定位是在程序运行时加载库时完成的。动态链接允许多个程序共享一个库,减小了可执行文件的大小,但需要在运行时处理地址重定位。
展开
评论
点赞
#挑战每日一条沸点# Git的版本分支图(Version Graph 或 Commit Graph)是用于展示版本库中提交(commit)的历史记录和分支结构的图形化表示方式。
评论
点赞
#挑战每日一条沸点# 在 Redis 中,客户端指的是连接到 Redis 服务器的应用程序,通常运行在本地 PC 或远程机器上。这些客户端应用程序可以是各种编程语言编写的,如Python、Java、C++等,它们使用 Redis 提供的命令来与 Redis 服务器进行通信,发送命令请求并接收响应。
服务器端指的是 Redis 数据库服务本身,它运行在一个或多个服务器上,负责存储数据、处理命令、执行操作等。Redis 服务器通过监听一个网络端口来等待客户端的连接请求,一旦连接建立,客户端可以向服务器发送命令,服务器会处理这些命令并返回相应的结果。
客户端通过网络协议(如 RESP 协议)与 Redis 服务器进行通信。客户端将命令请求以 RESP 格式发送给服务器,服务器执行这些命令并将结果以 RESP 格式返回给客户端。客户端负责构建和解析命令及响应,而服务器负责处理数据和执行操作。
服务器端指的是 Redis 数据库服务本身,它运行在一个或多个服务器上,负责存储数据、处理命令、执行操作等。Redis 服务器通过监听一个网络端口来等待客户端的连接请求,一旦连接建立,客户端可以向服务器发送命令,服务器会处理这些命令并返回相应的结果。
客户端通过网络协议(如 RESP 协议)与 Redis 服务器进行通信。客户端将命令请求以 RESP 格式发送给服务器,服务器执行这些命令并将结果以 RESP 格式返回给客户端。客户端负责构建和解析命令及响应,而服务器负责处理数据和执行操作。
展开
评论
点赞
GO三件套GORM 是通过驱动的方式来链接数据库的,目前支持 Mysql、SQLSever、PostgreSQL、SQLite。如果需要链接其他类型的数据库,可以 复用/自行 开发驱动。
评论
点赞
#挑战每日一条沸点# 今天看了下抖音项目,视频Feed流:支持所有用户刷抖音,视频按投稿时间倒序推出,视频投稿:支持登录用户自己拍视频投稿,个人主页:支持查看用户基本信息和投稿列表,注册用户流程简化。要实现这么多功能,真让人头大。
评论
点赞
一、MySQL:关系型数据库
mysql主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
mysql用于持久化的存储数据到硬盘,功能强大,速度较慢,基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高
mysql和redis因为需求的不同,一般都是配合使用。
需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存储数据在MySQL和Redis之间做同步。
缺点:海量数据处理的时候效率会显著变慢。
二:Redis :非关系型数据库
redis是将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
redis用于存储使用较为频繁的数据到缓存中,读取速度快,基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,但内存价格贵。
由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。
redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。
三、mangoDB:非关系型数据库
数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
优点:
1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
2、MongoDB的高可用和集群架构拥有十分高的扩展性。
3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
缺点:
1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
3、MongoDB占用空间过大。
mysql主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
mysql用于持久化的存储数据到硬盘,功能强大,速度较慢,基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高
mysql和redis因为需求的不同,一般都是配合使用。
需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存储数据在MySQL和Redis之间做同步。
缺点:海量数据处理的时候效率会显著变慢。
二:Redis :非关系型数据库
redis是将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
redis用于存储使用较为频繁的数据到缓存中,读取速度快,基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,但内存价格贵。
由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。
redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。
三、mangoDB:非关系型数据库
数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
优点:
1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
2、MongoDB的高可用和集群架构拥有十分高的扩展性。
3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
缺点:
1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
3、MongoDB占用空间过大。
展开
评论
点赞
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一
评论
点赞
今天在配置环境,在标准的PHP-FPM配置中,不会创建两个名为 www.conf 的文件。PHP-FPM只允许存在一个主 php-fpm.conf 文件和一个或多个 pool.d 目录下的池配置文件,而在 pool.d 目录中的每个池配置文件应该有不同的名称。
评论
点赞
今天了解了一下,nginx的负载均衡策略。负载均衡策略:
1. 基于请求的策略:【请求!】
• 轮询(Round Robin):按顺序将请求分配给后端服务器。
• 加权轮询(Weighted Round Robin):根据后端服务器的权重值,按顺序将请求分配给服务器。
• 最少连接(Least Connections):将请求分配给当前连接数最少的后端服务器。
2. 基于哈希的策略:【保持会话!】
• IP哈希(IP Hash):根据客户端IP地址计算哈希值,将请求分配给对应哈希值的后端服务器。主要是因为session不共享,这样可以让同个ip一直访问一个物理服务器,
• URL哈希(URL Hash):根据请求的URL计算哈希值,将请求分配给对应哈希值的后端服务器。
3. 基于性能的策略:【性能!】
• 最少响应时间(Least Response Time):将请求发送到响应时间最短的服务器。
• 最少带宽(Least Bandwidth):将请求发送到带宽使用最少的服务器。
4. 自适应策略:
• 自适应负载均衡(Adaptive Load Balancing):根据后端服务器的实际性能动态地调整负载均衡策略,以适应不同负载情况。
1. 基于请求的策略:【请求!】
• 轮询(Round Robin):按顺序将请求分配给后端服务器。
• 加权轮询(Weighted Round Robin):根据后端服务器的权重值,按顺序将请求分配给服务器。
• 最少连接(Least Connections):将请求分配给当前连接数最少的后端服务器。
2. 基于哈希的策略:【保持会话!】
• IP哈希(IP Hash):根据客户端IP地址计算哈希值,将请求分配给对应哈希值的后端服务器。主要是因为session不共享,这样可以让同个ip一直访问一个物理服务器,
• URL哈希(URL Hash):根据请求的URL计算哈希值,将请求分配给对应哈希值的后端服务器。
3. 基于性能的策略:【性能!】
• 最少响应时间(Least Response Time):将请求发送到响应时间最短的服务器。
• 最少带宽(Least Bandwidth):将请求发送到带宽使用最少的服务器。
4. 自适应策略:
• 自适应负载均衡(Adaptive Load Balancing):根据后端服务器的实际性能动态地调整负载均衡策略,以适应不同负载情况。
展开
评论
点赞
![[微笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_1.7d9f699.png)