堆和栈的区别
堆和栈的区别堆栈和堆之间的差异可能会让许多人感到困惑。所以,我认为整理一个关于堆栈问题和答案列表会非常有用。
堆和栈存储在哪里?它们都存储在计算机的 RAM(随机存取存储器)中。
为什么要区分堆和栈?之所以要区分堆和栈,是由于程序需要两种不同特性的内存形式而确定的。在C++中,新建一个对象有两种方式,静态分配和动态分配。
静态分配:
一般来说,静态分配用于初始化已知对象大小的时候,比如int a[10];如果我们能够确定这个数组是10个,我们可以使用这种方式。这种方式所需要的内存在编译期间即可确定,因此操作系统便可以预先确定所指定大小内存给变量,并且可以在变量生命周期结束后自动释放。
动态分配:
然而在某些场景下,可能需要根据某些情况来申请内存,比如int* a =new int[count];而变量count可能就来自于某个配置文件或者用户手动输入的值。这个时候操作系统就无法再预先确定内存大小,并且不执行到new int[count]这一行代码的时候,是无法知道所要分配的内存大小,因此操作系统分出一块内存,用来进行动态分配。并且规定,动态分配的内存需要由程序员自行管理。
之前的文章 ...
How JavaScript works - memory management + how to handle 4 common memory leaks
How JavaScript works: memory management + how to handle 4 common memory leaks
JavaScript工作原理:内存泄露 + 如何处理4中常见的内存泄露
Overview
概览
Languages, like C, have low-level memory management primitives such as malloc() and free(). These primitives are used by the developer to explicitly allocate and free memory from and to the operating system.
像C这样的语言,拥有底层内存管理原语,例如 malloc() 和 free()。开发人员使用这些原语显式地分配和释放操作系统中的内存。
关于原语定义可参考原语-百度百科和什么是『原语』?
At the same time, JavaScript allocates memory when things (objects ...
交换机和路由器的区别
交换机和路由器的区别交换机在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。若目的MAC不存在,交换机就广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加到内部地址表中。
交换机工作在OSI模型的数据链路层上。交换机内部的CPU在每个端口成功连接时,通过ARP协议来学习各端口的MAC地址,保存成一张ARP表。在以后的通信中,发往该MAC地址的数据包将仅仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域,但它不能划分网络层广播,即广播域。
交换机被广泛应用于二层网络交换,俗称“二层交换机”。交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机,分别工作在OSI模型的第二层、第三层、第四层和第七层。
路由器路由器是一种计算机网络设备,提供了路由与转发两种重要机制,可以决定数据包来源端 ...
去哪吃
去哪吃背景看到这个题目,你也许会想『啥意思,什么去哪吃,想去哪吃去哪吃呗』。说得好,关键是不知道去哪吃,纠结啊。于是,就想着可不可以搞一个每天定时告诉我去哪吃的小脚本,定时发个邮件告诉我去哪吃,距离、价格最好也能一并告诉我。正所谓:『行胜于言』,搞起:rofl:
其实这篇文章没啥技术含量,就是挺好玩的。:stuck_out_tongue:
准备工作
axios:请求库
nodemailer:用于发送邮件
1234mkdir getCatingcd getCantingnpm init --yesnpm i axios nodemailer
获取周边餐馆:v:检索周边地点主要是调用了百度地图的Web服务API。
可参考地点检索服务服务文档。
原型区域检索API(GET请求):http://api.map.baidu.com/place/v2/search?query=银行&location=39.915,116.404&radius=2000&output=xml&ak=您的密钥。具体的请求参数也可参考地点检索服务服务文档。
这个query参数里面 ...
Concurrency vs. Parallelism
Concurrency vs. Parallelism
并发 vs. 并行
Concurrency means multiple tasks which start, run, and complete in overlapping time periods, in no specific order. Parallelism is when multiple tasks OR several part of a unique task literally run at the same time, e.g. on a multi-core processor. Remember that Concurrency and parallelism are NOT the same thing.
并发是指多个任务,它们在重叠的时间段内(没有特定的顺序)开始,运行和完成。 并行是指多个任务或唯一任务的多个部分同时运行的情况,例如,在多核处理器上。 请记住,并发和并行性不是一回事。
Let’s understand more in detail that what I mean when ...
博客优化二三事
博客优化二三事前言交代一下背景,这个博客是最开始是基于jekyll搭建的github page,但是由于一些原因(主要是jekyll的主题觉得不好看), 寻寻觅觅,终于找到一个喜欢的主题,是基于Vuepress的,主题用的是vuepress-theme-modern-blog,于是就把博客迁移到基于Vuepress的github page。具体的迁移过程不复杂,个人的.vuepress/config.js可参考这里,在这篇文章就不再赘述。这篇文章主要打算记录一下迁移到Vuepress之后的一些问题的解决方法。
评论系统迁移文章其实比较简单,因为都是一些markdown文件,也没什么需要改的。但是原来的评论系统不能用啦,vuepress-theme-modern-blog给出了一个评论系统disqus,但是这个评论系统在国内由于防火墙的原因支持的不太好。于是发现了Vssue评论系统,经过咔咔一顿配置(主要是github的access token等),在一个md文件的最后添加<Vssue :title="$title" />一测试可以用,开心啊。但是接着问题 ...
How JavaScript works - inside the V8 engine + 5 tips on how to write optimized code
How JavaScript works: inside the V8 engine + 5 tips on how to write optimized code
Javascript工作原理:如何在 V8 引擎中书写最优代码的 5 条小技巧
Couple of weeks ago we started a series aimed at digging deeper into JavaScript and how it actually works: we thought that by knowing the building blocks of JavaScript and how they come to play together you’ll be able to write better code and apps.
几周前,我们开始了旨在更深入地研究JavaScript及其工作原理的一系列文章:我们认为,通过了解JavaScript的组成部分以及它们如何一起发挥作用,你将能够编写更好的代码和应用。
The first post of the series foc ...
AST实现函数自动包裹try/catch
AST实现函数自动包裹try/catch背景看到一篇关于AST的文章,关于如何通过AST自动给函数包裹try/cache,实现错误的自动捕获上报。感觉真的好玩,以前对AST了解的也不多,于是参考该文章自己实现了一下,并且发npm包,在实际项目中使用并验证。写此文记一下。
文章主要参考哈罗出行-杭州团队:AST实现函数错误的自动上报、Alibaba F2E团队:用JS解释JS!详解AST及其应用,还查阅babel官方网站的一下API。
在此对这些优秀的FE团队表示感谢。
真是一个伟大的时代。
下面是正文。
实现效果开发环境:
123var fn = function() { console.log('hello, world');}
线上环境
1234567var fn = function() {+ try { console.log('hello, world');+ } catch(error) {+ console.log(`${ ...
漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?
漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?背景关于在计算机中 0.1 + 0.2 为什么不等于 0.3这个问题,以前确实很好奇。但是由于一些不可抗力(懒)一直没有去深挖下去。近日,偶然发现一篇文章漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?,通过漫画的形式对这个问题做了解释,醍醐灌顶,遂转载至博客。对其作者表示感谢。
下面时正文。
正文
为什么当我们使用电脑浏览器计算0.2+0.1的时候,解决却是0.30000000000000004,而0.1+0.6的结果却是0.7呢?
这个问题其实一直是一个经典的问题,甚至有一个网站的域名就是https://0.30000000000000004.com/ ,主要就是解释这个问题的。
在这个网站中,列举了各种编程语言中计算0.2+0.1的结果,摘选几个如下:
可以看到,在各种语言中,计算0.2+0.1的结果都出奇的一致,那就是这个神奇的0.30000000000000004。
其实,当我们使用浏览器的控制台(F12)进行计算的时候,用到的就是JavaScript语言进行计算的,所以 ...
百度小程序——基础原理篇
百度小程序——基础原理篇背景出于兴趣和业务需要的双重要求,开始学习一下百度智能小程序的开发。本文侧重原生百度小程序的学习,后续会涉及到小程序框架okam的学习。
简介智能小程序,是百度提供的一种技术解决方案。开发者基于此开发出来的服务,在各类宿主环境(手机 App、车载系统、IOT 设备等)中,可做到用户无感知安装过程即点即用。
小程序使用了双线程模型,包括逻辑层和渲染层。逻辑层作为一个单独的线程执行js代码,控制小程序数据的生成和处理;渲染层使用WebView线程,处理页面的渲染和用户的事件交互行为。
基本原理概览小程序开发包括全局配置文件、页面配置文件。开发者可通过app.json和app.js文件对小程序进行全局配置;通过.css、.js、.json和.swan文件进行页面配置。具体结构如下:
123456789101112131415├── app.js├── app.json├── app.css├── project.swan.json└── pages └── index ├── index.swan ├── index.css ...