首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个纯本地应用移植到 Web 端

研究一个奇怪缓存错误(https://actualbudget.com/blog/cursed-caching-curious)得到了启发,于是去重新看了一下 Actual 是如何在 Web 端本地存储数据...这里需要解释一些历史背景:多年前,Actual 原本是一个单纯桌面应用程序来着。这意味着我们所有数据都会存储本地,没有服务器,自然也不会在网络上存储任何内容。...最担心数据存储层。由于 所有数据都在本地存储,因此如果本地环境出现了什么问题,用户就可能会丢失数据。而且因为我们要把所有内容都存储本地,这给浏览器持久数据库也带来了巨大压力。...一直深入研究各种浏览器是如何在磁盘上存储 IndexedDB 数据,并发现了可以做出一些改进策略。本想在这篇文章详细介绍一番,但最后还是把主题放在了整体概述上。...在下一篇文章深入研究 IndexedDB 是如何在浏览器工作。 注释 [0] 虽然在这篇文章没有谈论这个话题,不过它意味着整个应用都在浏览器运行。

1.8K20

关于 Virtual SANVSAN 常见问题解答

认为可以将其与内存预留进行比较。 • 问:VSAN会使用 iSCSI 或 NFS 主机连接到数据存储吗? 答:VSAN 不会使用其中任何一种主机连接到数据存储。它会使用一个专有机制。...• 问:虚拟机群集中移动,它对象是否会跟着一起移动,以使 IO 保持本地状态呢? 答:不会,对象(虚拟磁盘)不会跟着虚拟机一起移动。...您需要使用相关标识符 SSD 标记为本地(以下示例是实验室中使用,可能与您标识符不同)。此处,将其设为了“本地”和“SSD”。...• 问:虚拟机群集中移动,它对象是否会跟着一起移动,以使 IO 保持本地状态呢? 答:不会,对象(虚拟磁盘)不会跟着虚拟机一起移动。...您需要使用相关标识符 SSD 标记为本地(以下示例是实验室中使用,可能与您标识符不同)。此处,将其设为了“本地”和“SSD”。

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

一、前言 一切谜都解开了!写这篇随笔之前,心情只能用金田一每次破案后这句台词来表达。...其实以前一直对Unicode有点误解,印象Unicode码最大只能到0xFFFF,也就是最多只能表示 2^16 个字符,仔细看了维基百科之后才明白,早期UCS-2编码方案确实是这样,UCS...注意:UTF-8是Unicode标准实现,它代码包含了所有的Unicode取值,所以任意编码转换到UTF-8,再转换回去都不会有任何丢失。...用如下代码测试发现,当通过编码数据代码查不到对应Unicode,就返回缺省值\ufffd(对应图中第一种问号),反过来,当通过Unicode代码查不到对应编码数据,就返回缺省值0x3f...如下图所示,编译后这3个Unicode.class文件实际以类UTF-8编码存储,运行时候,JVM存储就是Unicode,然而最终输出,还是会编码之后传递给终端,这次约定编码就是系统区域设置编码

1.5K10

理解Session State模式+ASP.NET SESSION丢失FAQ

StateServer:当存储基本类型(string,integer等)数据同一个测试环境它比InProc慢15%。...如果你存储大量对象,序列化和反序列化可能影响到性能 SQLServer:当存储基本类型(string,integer等)数据同一个测试环境它比InProc慢25%。...Session_End代码使用工作者进程账号运行,如果你访问如数据库这样资源,可能会有权限问题。 b. 如果在Session_End中发生错误,程序不会通知发生了什么 5....在这种情况下,那么每次请求都会创建一个新session state(ID也是新),但是不会存储,因为里面什么数据都没有。...Q: cookieless设置为true,Redirect之后session变量丢失了,为什么? A: 如果你使用是cookieless,你必须使用相对路径(..

1.5K20

什么JSON.parse会损坏大数字,如何解决这个问题?

你可以一个JSON文档粘贴到一个JavaScript文件,这就是有效JavaScript。 JavaScript中使用JSON应该不会出现任何问题,但有一种棘手情况可能会破坏数据:大数字。...像 9123372036854000123 这样长数字既是有效 JSON 也是有效 JavaScript。当JavaScript 数值解析为数字,事情就出错了。...在用浮点数存储分数也会发生同样情况:当你 JavaScript 中计算 1/3,结果是: 0.3333333333333333 现实,该值应该有无限小数,但 JavaScript 数字大约...这取决于你解析数据后想做什么,但通常情况下,你想用它一些事情。屏幕上显示数据,验证它,比较它,排序它,等等。...这个库不知道BigInt或LosslessNumber类型,不会正确串联这些数据类型。

2.6K20

创建一个DIYAPM监视Node.jsWeb应用程序性能

本文中,我们构建一个工具来监视一个简单Node.js应用程序应答HTTP请求MongoDB花费多少时间。.../ cats,控制台显示: 但是,这个补丁会有几个问题: 1.我们不知道哪个HTTP请求负责这个调用。...让我们编写一个包装函数来执行返回一个promise函数: 每次调用方法,我们都会为每个性能度量创建一个唯一ID。这将确保两个定时操作之间不发生碰撞。...这个API使我们能够异步操作上设置钩子。 出于我们目的,我们只需要这个API来跟踪负责代码执行HTTP请求。一些包(持续本地存储或区域各种实现)提供了类似的功能。...它可以通过调用: 在给你源码之前,我会分享最后两个秘密: 1.为了覆盖一个模块,我们可以通过改变核心中私有方法来改变需要行为。这不是一个好解决方案,但目前不知道什么更好方法来实现它。

1.5K80

API 工程化分享

依赖信息丢失 proto 未更新 钻石依赖 依赖信息丢失 在你工程里面依赖了其他服务,依赖信息变成了源码依赖,你根本不知道依赖了哪个服务,以前是 protobuf 依赖关系,现在变成了源码依赖,服务依赖信息丢失了...文件,因为对它来说这个依赖信息已经丢失,为什么每次都要去做这个动作呢?...,这使我们能够不同 API,API 协议( gRPC 或 HTTP)以及错误上下文(例如,异步,批处理或工作流错误)获得一致体验。...比如你返回错误码是4,代表商品已下架,对这个错误很感兴趣,但是错误码4 项目里面已经被用了,就把它翻译为还没使用错误码6,这样每次翻译时候就可以对上一层你调用者,你就可以交代清楚你会返回错误码...我们知道以前 dubbo 2.x,3.x 之前都是把这些元信息注册到注册中心,导致整个数据中心存储爆炸,那么元信息在哪?

52830

揭秘软件开发达摩克利斯之剑

经历了那么多次强化和改造,功能逐渐变多同时,也因此被植入了各种框架和插件,体积像滚雪球一般越来越大,不知道什么时候就会爆炸。以至于主人们每次改动都要万分谨慎,成长也变得十分缓慢。...一般情况下,上传到对象存储文件是不会缺失或丢失,而且还可以已上传数据进行跨园区同步,起到备份作用。...起初以为是文件上传到对象存储,会自动被压缩,但是将对象存储文件下载到本地后,发现的确和源文件不一致!虽然出现这种情况概率极其小,但从那一刻起,再也不相信对象存储了。...配置回滚 如果项目的配置信息,比如数据库链接地址,写死到代码,一旦配置错了或者地址发生变更,就要重新修改代码,非常麻烦。...通常,高并发项目中,我们会设计多级缓存,即分布式缓存 + 本地缓存。当请求需要获取数据,先从分布式缓存(比如 Redis) 查询,如果分布式缓存集体宕机,那就从本地缓存获取数据

60630

使用可重入函数进行更安全信号处理

可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么使用全局变量保护自己数据。 可重入函数: 不为连续调用持有静态数据。...然后进程继续执行,但现在执行是信号处理器指令。如果信号处理器返回,则进程继续执行信号被捕获正在执行正常指令序列。 现在,信号处理器您并不知道信号被捕获进程正在执行什么内容。...大部分机器上, data 存储一个新值都需要若干个指令,每次存储一个字。如果在这些指令期间发出信号,则处理器可能发现 data.a 为 0 data.b 为 1,或者反之。...不过这必须要小心进行,因为一个对象添加到一个链并不是原子操作,如果它被另一个同样动作信号处理器打断,那么就会“丢失”一个对象。...编译器可以这个指示符存储符号表,并在中间代码生成阶段使用这个指示符。为达到此目的,编译器前端设计需要有一些改变。此可重入指示符遵循这些准则: 不为连续调用持有静态数据

1.5K20

【前端面试题】2021315面试题

token,存储到服务器,并返回token到APP,以后APP请求,凡是需要验证地方都要带上该token,然后服务器端验证token,成功返回所需要结果,失败返回错误信息,让他重新登录。...其中服务器上token设置一个有效期,每次APP请求时候都验证token和有效期。 那么问题来了: 1.服务器上token存储数据每次查询会不会很费时。...话说加密存储一个你要是被人扒开客户端看也不会被喷明文存储…… 方法1它拿到存储密文解不开、方法2它不知道签名算法和盐,两者可以结合食用。...(在请求接口调用时触发) // 添加请求拦截器 axios.interceptors.request.use(function (config) { // 发送请求之前做些什么...因为MVVM,View不知道Model存在,ViewModel和Model也察觉不到View,这种低耦合模式可以使开发过程更加容易,提高应用可重用性。

1K10

MQ消息中间件,面试能问些什么

(2)既然用了消息队列这个东西,你知不知道用了有什么好处? (3)既然你用了MQ,那么当时为什么选用这一款MQ? 1. 为什么使用消息队列?...非常高,分布式架构 非常高,kafka是分布式,一个数据多个副本,少数机器宕机,不会丢失数据不会导致不可用 消息可靠性 有较低概率丢失数据 经过参数优化配置,可以做到0丢失 经过参数优化配置,...这个时候得用rabbitmq提供ack机制,简单来说,就是你关闭rabbitmq自动ack,可以通过一个api来调用就行,然后每次你自己代码里确保处理完时候,再程序里ack一把。...leader所在broker发生故障,进行leader切换数据不会丢失 3)生产者会不会弄丢数据 如果按照上述思路设置了ack=all,一定不会丢,要求是,你leader接收到消息,所有的follower...这个生产系统中常见问题。 举个例子,我们以前做过一个mysql binlog同步系统,压力还是非常大,日同步数据要达到上亿。

40830

MQ

(2)第二,你既然用了消息队列这个东西,你知道不知道用了有什么好处? 系统引入消息队列之后会不会什么坏处?你要是没考虑过这个,那你盲目弄个MQ进系统里,后面出了问题你是不是就自己溜了给公司留坑?...非常高,分布式架构 非常高,kafka是分布式,一个数据多个副本,少数机器宕机,不会丢失数据不会导致不可用 消息可靠性 有较低概率丢失数据 经过参数优化配置,可以做到0丢失 经过参数优化配置,...这就有所谓高可用性了。 写数据时候,生产者就写leader,然后leader数据落地写本地磁盘,接着其他follower自己主动从leader来pull数据。...这个时候得用rabbitmq提供ack机制,简单来说,就是你关闭rabbitmq自动ack,可以通过一个api来调用就行,然后每次你自己代码里确保处理完时候,再程序里ack一把。...leader所在broker发生故障,进行leader切换数据不会丢失 3)生产者会不会弄丢数据 如果按照上述思路设置了ack=all,一定不会丢,要求是,你leader接收到消息,所有的follower

2.8K71

嘴都气歪了!

任务丢失 我们在编写业务代码,经常会将比较耗时任务异步化,任务提交到线程池后立即返回成功。线程池会从任务队列依次读取并执行任务。...消息丢失 分布式系统,各个节点间经常通过消息来进行交互和协作,程序中断可能会在不同情况下导致消息丢失。 1....很多同学本地调试,应该也会遇到因为强退导致 3000、8080 端口未被释放问题。...此外,服务下线如果未向上游(该服务调用方)通知,还可能导致上游持续调用,严重时会产生雪崩效应,整条服务链路中断! 尤其是分布式场景下,出现进程强制中断对集群影响(比如数据一致性)非常大。...--- 其实,相比起这些问题,更可怕是,如果没有完善数据监控和检测机制,你甚至完全不知道强制停机后有没有出现问题?出现了哪些问题?哪些数据丢失?哪些数据不一致?哪些任务需要补偿?

70340

你对Redis使用靠谱吗?Redis性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么

Redis是单线程执行完成一个操作之前,不会有其他操作被执行。这的确是真的。但是,在业务开发,需要不是一个简单操作原子性,需要实现一个临界区原子性。...用户下单,要在Redis扣减库存,并且另外一个数据INSERT一条交易记录。这段逻辑是没法做到原子——除非你自行实现了某种分布式事务机制。...你是否具有专业存储开发技能,你能投入多少精力ACID上,你公司能给你多少资源开发测试,这些都需要仔细考虑。 用Redis可以当队列,吗? Redis实现了一个List数据结构。...试想一下,你界面允许用户下一笔订单,用户已经看到了“成功下单”界面,结果之后却发现什么订单也没有。用户是不是有一句MMP不知道当讲不当讲。...也许,你会说,"场景不需要这么严格一致性,数据丢了没所谓,也不需要事件重放,数据处理错了错了"。这个Redis的确可以办到,而且可以做得很好。

3.7K110

docker解决数据存储问题方案

/userguide/dockervolumes/ 介绍具体方案以前先说说基于container运行程序有什么数据存储问题。...传统软件开发人员都习惯了使用本地磁盘保存文件等数据,如果程序挂了以后重新启动以后那么数据还在(硬盘没坏情况下),你可能会说为什么不使用云存储或者分布式文件系统或者数据库之类,首先传统行业开发者可能还没有接受或者接触云存储系统和概念...先看看我以前是怎么解决这个问题(其实你会发现和docker解决方案是那么惊人相似),我们为开发者提供一个目录,承诺在这个目录下存放文件保证大多数情况下不会丢失(极端情况可能会丢失一些数据,例如硬盘坏掉而且这时数据刚好还没有成功备份...为了解决上传过多文件到云存储每次都是覆盖以前文件,即一个应用只有一个压缩文件被存放在云存储。通过这种方案我们解决了基本上99%以上数据存储问题。...现在docker自身系统应该还不能夸机器container共享数据吧,要做其实也简单,通过网络共享volume。但是为什么docker现在没有不知道是不是不知道而已),想这种需求有吗?

1.1K70

前端面试题(HTML和CSS)

IE6也是类似这样,它将DTD当成了这个“参数”,以前页面大家都不会去写DTD,所以IE6就假定 如果写了DTD,就意味着这个页面采用对CSS支持更好布局,如果没有,则采用兼容之前布局方式...sessionStorage (session)数据,这些数据只有同一个会话页面才能访问并且当会话结束后数据也随之销毁。...因此sessionStorage不是一种持久化本地存储,仅仅是会话级别的存储localStorage用于持久化本地存储,除非主动删除数据,否则数据是永远不会过期。...Cookie大小是受限,并且每次你请求一个新页面的时候Cookie都会被发送过去,这样无形浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。...但是Cookie也是不可以或缺:Cookie 作用是与服务器进行交互,作为HTTP规范一部分存在 ,Web Storage仅仅是为了本地存储数据而生。

72620

程序员如何提一个好问题

所以我把这个问题写到 rkt-dev 邮件列表:为什么rkt存储容器图像不同于Docker?...问答案是事实问题 有很多问题一开始有点模糊,“SQL连接查询JOIN如何工作?”。这个问题不是很棒,因为连接查询如何工作有很多不同部分!那么对方怎么知道有兴趣学习什么?...问的人通常真的非常善于说“不,不知道!” 识别你不明白术语 当我开始当前这份工作首先去了数据团队。当我看我新工作需要什么时候,有这些要求!...一些研究 键入上面的SQL问题Google搜索框输入了“如何实现SQL连接”。...认为问题当作一件你可以超棒事情,并放到对话是很重要不要只是认为“问好问题,这样人们才只会稍微恼火,不会非常非常恼火”。

83550

程序员如何提一个好问题

所以我把这个问题写到 rkt-dev 邮件列表:为什么rkt存储容器图像不同于Docker?...问答案是事实问题 有很多问题一开始有点模糊,“SQL连接查询JOIN如何工作?”。这个问题不是很棒,因为连接查询如何工作有很多不同部分!那么对方怎么知道有兴趣学习什么?...问的人通常真的非常善于说“不,不知道!” 识别你不明白术语 当我开始当前这份工作首先去了数据团队。当我看我新工作需要什么时候,有这些要求!...一些研究 键入上面的SQL问题Google搜索框输入了“如何实现SQL连接”。...认为问题当作一件你可以超棒事情,并放到对话是很重要不要只是认为“问好问题,这样人们才只会稍微恼火,不会非常非常恼火”。

1K40

程序员如何提一个好问题

一直问人们一些愚蠢并且完全可以通过谷歌搜索或搜索代码库解决问题。大多数时候都不愿意自己去搜索解决,但有的时候又会无论如何都自己去搞定,而且也不会认为这如同世界末日一样可怕。...所以我把这个问题写到 rkt-dev 邮件列表:为什么rkt存储容器图像不同于Docker?...问的人通常真的非常善于说“不,不知道!” 识别你不明白术语 当我开始当前这份工作首先去了数据团队。当我看我新工作需要什么时候,有这些要求!...一些研究 键入上面的SQL问题Google搜索框输入了“如何实现SQL连接”。...认为问题当作一件你可以超棒事情,并放到对话是很重要不要只是认为“问好问题,这样人们才只会稍微恼火,不会非常非常恼火”。

65730

干货 | 从资深软件工程师学到避坑大法

例如:当你 SQLAlchemy 调用 session.close() ,这只会关闭会话但不会关闭底层数据连接。...每次代码审查都问自己:「他们为什么这样?「。每当我找不到合适答案就会去和他们谈谈。 第一个月后,开始同事代码中找到错误(就像他们对代码一样)。...最后我们使用了一个有角色访问控制数据库(只有我们机器可以与数据库对话)。我们代码启动从这个数据获取秘密数据。这个能在开发、测试和产品之间很好地复制——各自数据库中都有机密。...你知道每台机器上运行什么,以及如何在死机情况下重新创建它们。当一台机器死机时,你不会心烦意乱,你只需要启动一台新机器。你像牛一样放养它们,不是像宠物一样养着他们。...如果一个衡量标准是当前产品运行机器数量,当这个数字降到 50% ,这是一个很好警报——你知道有什么错了。 失败计数高于某个阈值?是的,又一个警报。 这里暗示了另一个需要养成习惯。

55620
领券