- 博客(24)
- 收藏
- 关注
原创 排序+遍历思路和算法解决最小绝对差问题
随后我们对数组 arr 进行一次遍历。当遍历到 arr[i] 和 arr[i+1] 时,它们的差为 δ = arr[i+1] − arr[i]。首先我们对数组 arr 进行升序排序。这样一来,拥有「 最小绝对差 」的元素对只能由有序数组中相邻的两个元素构成。给你个整数数组 arr ,其中每个元素都不相同。请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。好了,今天的文章分享就到这里了,希望对大家的学习有帮助哦!
2025-05-19 08:58:56
230
原创 为实时数据构建WebSocket解决方案的挑战
开发团队可能会发现,他们更关注实时方面,而不是增强核心产品的功能,并面临可扩展性和弹性、延迟、容错以及数据完整性和连接管理方面的工程挑战。扩展自行开发的解决方案以可靠地处理数百万个并发 WebSocket 连接是一项复杂且耗时的任务,需要专用的工程资源、大量的基础架构成本和时间。为了以不可预测的规模成功处理 WebSocket 连接,还需要弹性以自动添加更多服务器,以便系统有足够的容量来处理潜在的使用高峰。水平扩展带来了更复杂的架构、负载平衡、路由以及增加的基础架构和维护成本,仅举几例挑战。
2025-05-18 09:29:55
268
原创 C++11的原子操作及Meyers单例
在《Effective C++》一书中提到:任何一种 non-const static 对象,不论它是 local 还是 non-local,在多线程环境下“等待某事发生”都会有麻烦。处理这个麻烦的一种做法是:在程序的单线程启动阶段,手工调用所有 reference-returning 函数,这可能消除与初始化有关的“竞速形式”。如大家所知,在C++11中将原子操作纳入了标准,我们可以通过标准提供的原子操作来处理该问题。在 C++11 中保证了会以线程安全的方式初始化一个静态局部变量,因此可以放心使用。
2025-05-17 08:47:55
222
原创 数据结构中双栈的实现方法分享
在考研中一般要求学生能够写出单次计算和后缀表达式生成的全过程。而求职中则需要能够 ac 掉笔试的代码题。最后基于双栈的方法除了处理本文中提到的常见四则运算外,还可以针对四则运算以外的运算符或者自定义的运算符进行处理。由于 772 是会员题,读者可以分别练习 224. 基本计算器 和 227. 基本计算器 II 作为代替。根据运算符的种类,对数值栈的栈顶元素和栈顶倒数第二个元素进行运算,并将计算结果再次保存到数值栈中。表达式求值是数据结构的学习中非常经典的一个应用。首先最重要的,我们需要两个和栈。
2025-05-15 16:30:01
423
原创 编译型语言和解释型语言的执行流程及差异总结
编译型语言和解释型语言的执行流程:编译型语言和解释型语言的差异总结如下图:值得注意的是,当我们说“下载一个程序(软件)”时,不同类型的语言有不同的含义:
2025-04-11 13:30:00
600
原创 利用高阶函数实现AOP
把这些功能抽离出来之后,再通过“动态织入”的方式掺入业务逻辑模块中。这样做的好处首先是可以保持业务逻辑模块的纯净和高内聚行,其次就是可以很方便地复用日志统计等功能模块。如大家所熟悉的,AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等。这种使用 AOP 的方式来给函数添加职责,也是 JavaScript 语言中一种非常特别和巧妙的装饰者模式实现。
2025-04-09 20:45:00
605
原创 进程同步和进程互斥的区别
如大家所了解的,进程互斥是由互斥资源引起的,即各进程之间共享互斥资源的使用权,这种竞争没有确定的必然联系,哪个进程竞争到互斥资源的使用权,则该资源就归哪个进程使用,从而获得所需资源的进程就可以获得 CPU 继续执行,直到它不再需要该资源时才放弃该资源的使用权,而那些未申请到互斥资源的进程则不能执行,直到得到所申请的互斥资源。则是指相互协作的并发进程之间存在着必然的联系,若当前运行进程执行过程中需要进行同步时,在没有得到协同工作的其他合作进程发来的同步消息之前,当前运行进程则不能继续向前推进(运行)。
2025-04-08 19:30:00
505
原创 浅谈进程的就绪状态与挂起状态
当内存中没有就绪进程时,为了减少 CPU 的空闲事件,可以采用换出技术将内存中暂时不能运行的某些进程挂起,释放其占用的内存资源,以便重新接纳一个新进程或外存上已具备运行条件的进程进入内存的进程就绪队列。当某个进程被挂起时,若被挂起的进程处于运行状态则停止执行,若被挂起的进程处于就绪状态则暂时不参加进程调度。进程获得除 CPU 之外的所需资源,一旦得到 CPU 就可以立即运行,不能运行的原因是还是因为 CPU 的资源太少,只能等待分配 CPU 资源。新创建的进程一旦被系统接纳就一直存在内存中,直到被终止。
2025-04-07 17:45:00
692
原创 学习了解主线程和线程池
当服务器接收一个请求时,系统就唤醒其中的一个线程,并将请求传给它,由这个线程进行服务。当完成任务后,线程被重新放入到线程池中,等待新的请求和服务,如果线程池中没有可用的线程,服务器就要等待,直到有一个线程被释放。线程执行过程中若发生某种等待事件 ,则会将自己阻塞起来,若等待事件已完成,则相关线程会唤醒因等待该事件而阻塞的线程。多线程操作系统中,在创建新进程的同时也为该进程创建一个线程,被称为初始化线程,即主线程。在创建一个进程时,相应的创建若干个线程,将它们放在一个缓冲池中 ,这些线程在等待工作。
2025-04-07 08:15:00
662
原创 HTTPS通信的加密问题
如大家所了解的,在未加密的 HTTP 中,客户端会打开一条道 web 服务器端口 80 的 TCP 连接,发送一条请求报文,接收一条响应报文,关闭连接。需要注意的是:SSL 是一个二进制协议,且在通过网络传输任何已加密的 HTTP 数据前,SSL 已经发送了一组握手数据来建立通信连接了。
2025-04-01 11:58:53
690
原创 HTTP1.x的header压缩
HTTP2.0 可以维护一个字典,差量更新 HTTP 头部,大大降低因头部传输产生的流量。如大家所了解的,HTTP1.x 的header 带有大量信息,而且每次都要重复发送,HTTP2.0 使用encoder 来减少需要传输的 header 大小,通讯双方各自 cache 一份 header fields 表,既避免了重复 header 的传输,又减小了需要传输的大小。
2025-03-31 12:23:22
472
原创 常见的响应头信息
Content-Encoding,文档的编码(Encode)方法,只有在解码之后才能得到 Content-Type 头指定的内容类型。Content-Length,表示内容的长度,只有当浏览器使用持久HTTP连接时才需要这个数据。Content-Type,表示后面的文档属于什么 MIME 类型。Expires,应该在什么时候认为文档已经过期,从而不再缓存它。Refresh,表示浏览器应该在多少时间之后刷新文档,以秒计算。Last-Modified,文档的最后改动时间。Date,当前的 GMT 时间。
2025-03-30 19:06:21
635
原创 TCP可靠传输与慢启动机制
TCP 慢启动限制了一个 TCP 的端点在任意时刻可以传输的分组数,简单来说,每成功接收一个分组,发送端就有了发送另外两个分组的权限,如果某个 HTTP 事务有大量数据要发送,是不能一次将所有分组都发送出去的,必须发送一个分组,等待确认,然后可以发送两个分组,每个分组比较被确认,这样就可以发送四个分组,依次类推,这种方式被称为“打开拥塞窗口”。每个段的接受者收到完好的段时,都会向发送者回送小的确认分组,如果发送者没有在指定的窗口时间内收到确认信息,发送者就认为分组已经被破坏或损毁,然后重发数据。
2025-03-30 11:08:40
844
原创 WebSocket通信的握手阶段
3. 一旦 websocket 握手成功,服务端与客户端将会呈现对等的效果,都能接收和发送消息,当前连接将不再进行 http 的交互,而是开始 websocket 的数据帧协议,实现客户端与服务器端的数据交互。2. 服务器端响应客户端,告诉客户端正在更换协议(状态码为 101),更新应用层协议为 websocket 协议,并在当前的套接字连接上应用新的协议。上述两个字段表示请求服务器端升级协议为 websocket 协议。连接建立成功后,前后端就可以愉快的进行通信了。
2025-03-29 18:30:44
636
原创 如何高效使用内存的方法
foo() 函数在每次被调用时会创建对应的作用域,函数执行结束后,该作用域将会被销毁,同时作用域中声明的局部变量分配在该作用域上,随作用域的销毁而销毁。在正常的 JavaScript 执行中,无法立即回收的内存有全局变量引用和闭包这两种情况。由于 V8 的内存限制,要十分小心此类变量是否无限制的增加,因为它会导致老生代中的对象增加。在这个例子中,由于对象非常小 ,将会分配在新生代中国的 From 空间中。在作用域释放后,局部变量 local 失效,其引用的对象将会在下次垃圾回收是被释放。
2025-03-28 12:21:18
402
原创 V8的内存分代方法
如大家所了解的,在V8中,主要将内存分为新生代和老生代两代。新生代中的对象为存活时间较短的对象,老生代的对象为存活时间较长或常驻内存的对象。比较遗憾的是,这两个最大值需要在启动时就指定,这意味着,V8 使用的内存没有办法根据使用情况自动扩充,当内存分配过程中超过极限值时,就会引起进程出错。V8 堆的整体大小就是新生代所用内存空间加上老生代的内存空间。
2025-03-27 21:00:42
525
原创 Vue Router动态改变路由参数的两种方法
实际上,Vue Router动态改变路由参数的方法不止两种,下面就我个人经验而言,分享两种常见的方法供大家参考、学习:replace()和push() 的区别:
2025-03-26 14:03:00
782
原创 Vue $bus被多次触发
后面找到了解答:只要页面没有强制刷新,存在组件切换,bus.$on方法会被多次绑定,造成事件多次触发。以上便是今天的全部内容。好了,今天的文章分享就到这里了,希望对大家的学习有所帮助哦~最近遇到一个问题:Vue $bus被多次触发。
2025-03-25 18:43:52
577
原创 ElementUI表格添加默认值不生效
通过 find() 方法,让表格(this.tableData)去匹配选中的行数据(this.multipleSelection)的数据,然后使用 toggleRowSelection 方法设置选中。通过循环选中的行数据(multipleSelection),然后从表格所有数据(tableData)中匹配 id 找到需要选中的项来帮助选中。设置选中的行数据与表格中的行数据不是同一个数据(虽然数据一摸一样,但是内存指针不一样),所以导致直接使用选中的行数据来设置可能会不生效。若还有疑问,欢迎留言一起探讨!
2025-03-24 11:07:16
439
原创 vue使用keep-alive缓存页面状态问题
答:由于新建页面和编辑页面基本相同,所以二个路由页面指向同一个组件,在使用 keep-alive 缓存的时候不能分别缓存这两个页面的状态。问题:这样做会导致两个页面状态完全一样,因为引用的就是同一个组件,keep-alive 缓存的也就是同一个组件。
2025-03-21 11:48:26
787
1
原创 ElementUI el-radio失效
我们在使用过程中,偶尔会遇到ElementUI el-radio失效,无法切换选中效果的情况。这个时候该如何解决呢?好了,看了以上代码,应该明白了吧?希望今天的文章对大家有帮助哦!
2025-03-20 09:19:51
807
原创 字符串模板(单文件组件、JSX)
首先需要了解基本释义:字符串模板就是写在 vue 中的 template 中定义的模板,如 .vue 的单文件组件模板和定义组件时 template 属性值的模板。此外,字符串模板不会在页面初始化时参与页面的渲染,而是会被 vue 进行解析编译之后再被浏览器渲染,所以不受限于 html 结构和标签的命名。总的来说,推荐遵循 W3C 中的自定义组件名 (字母全小写且必须包含一个连字符),这会帮助你避免和当前以及未来的 HTML 元素相冲突。
2025-03-18 08:37:51
458
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅