浏览器及HTTP缓存机制

Web 缓存是一种保存 Web 资源副本并在下次请求时直接使用该副本的技术。缓存=请求资源的副本 Web 缓存可以分为这几种:浏览器缓存、CDN 缓存、服务器缓存、数据库数据缓存 。因为可能会直接使用副本免于重新发送请求或者仅仅确认资源没变无需重新传输资源实体,Web 缓存具有以下优点: 可以减少延迟加快网页打开速度 重复利用资源减少网络带宽消耗 降低请求次数或者减少传输内容从而减轻服务器压力。 ...

July 26, 2018 · 4 min · 724 words · itibbers

Node.js模拟请求发微博

新浪微博 SDK 需要申请 App key,极其不方便,通过 Node.js 模拟请求发送微博。 ...

February 16, 2018 · 1 min · 37 words · itibbers

Android Broadcast/EventBus优缺点

关于 Android 中本地广播和 EventBus 选择的问题: 本地广播是相对消耗时间、空间最多的一种方式,但是大家都知道,广播是四大组件之一,许多系统级的事件都是通过广播来通知的,比如说网络的变化、电量的变化,短信发送和接收的状态,所以,如果与 android 系统进行相关的通知,还是要选择本地广播;在 BroadcastReceiver 的 onReceive 方法中,可以获得 Context 、intent 参数,这两个参数可以调用许多的 sdk 中的方法,而 EventBus 获得这两个参数相对比较困难; ...

January 24, 2018 · 1 min · 77 words · itibbers

An invalid form control with name='xxx' is not focusable.

在表单提交时,如果某个控件被设置为 display: none 且该字段可以为空,则必须移除 required 属性,否则在 Chrome 浏览器中会出现错误。 Chrome 浏览器要求必填字段不能为空,因此会弹出"请在此输入"的提示消息。但是,如果该控件被隐藏,Chrome 浏览器在表单提交时无法聚焦到该控件,因为它是不可见的,从而导致表单提交失败。 要解决这个问题,当通过 JavaScript 隐藏控件时,我们也必须同时移除该控件的 required 属性。

November 22, 2016 · 1 min · 16 words · itibbers

set autocommit=0与start transaction区别

set autocommit=0, 当前 session 禁用自动提交事物,自此句执行以后,每个 SQL 语句或者语句块所在的事务都需要显示"commit"才能提交事务。 start transaction 指的是启动一个新事务。 在默认的情况下,MySQL 从自动提交(autocommit)模式运行,这种模式会在每条语句执行完毕后把它作出的修改立刻提交给数据库并使之永久化。事实上,这相当于把每一条语句都隐含地当做一个事务来执行。如果你想明确地执行事务,需要禁用自动提交模式并告诉 MySQL 你想让它在何时提交或回滚有关的修改。 执行事务的常用办法是发出一条 START TRANSACTION(或 BEGIN)语句挂起自动提交模式,然后执行构成本次事务的各条语句,最后用一条 COMMIT 语句结束事务并把它们作出的修改永久性地记入数据库。万一在事务过程中发生错误,用一条 ROLLBACK 语句撤销事务并把数据库恢复到事务开 始之前的状态。 START TRANSACTION 语句"挂起"自动提交模式的含义是:在事务被提交或回滚之后,该模式将恢复到开始本次事务的 START TRANSACTION 语句被执行之前的状态。(如果自动提交模式原来是激活的,结束事务将让你回到自动提交模式;如果它原来是禁用的,结束 当前事务将开始下一个事务。) 如果是 autocommit 模式 ,autocommit 的值应该为 1 ,不 autocommit 的值是 0 ;请在试验前 确定 autocommit 的模式是否开启

November 17, 2016 · 1 min · 44 words · itibbers

快速幂 快速幂取模

快速幂 求 x^m 一般方法是 xm = x * xm-1,这样需要做 m 次乘法,未免过慢。 加速方法有两种。 1.基于当 m 为偶数时, xm = (x2)^(m/2) ;当 m 为奇数时, xm = x * xm-1。显然当 m 为偶数时 m 会减半,当 m 为奇数时,下次就是偶数。m 可以很快收敛到 0.(^表示幂) 2.将 m 看成二进制串 mkmk-1…m1m0,那么 xm = xm02^0 + m12^1 + … + mk2^k = xm02^0 * xm1*2^1 _ … _ xmk*2^k. mi 为 0 或 1,假设平均有一半 mi 为 1,即 k 个,那么总共才只需要做(k+(k/2))次乘法。 下面给出代码。第一个方法是加速方法 1,第二个方法是加速方法 1 的迭代形式,第三个方法是加速方法 2。 ...

June 22, 2016 · 2 min · 289 words · itibbers

类 unix 系统下字符编码转换方法

用 windows 的时候,如果把 gbk 转换为 utf8,有几个方法,一是记事本另存为,但是存在 BOM 的问题,另一种方法是通过不产生 BOM 的软件,如 vim,sublime 来 code 或保存,太过麻烦。 今天无意中发现了 Mac 系统下,有个 iconv 的命令,可以非常方便的转换字符编码。 iconv -f gbk -t utf-8 gbk.cpp > utf8.cpp 配合管道输出,简直不能更方便。 不光 Mac 系统有,所有类 unix 系统都有这个命令。 NAME iconv - character set conversion SYNOPSIS iconv [OPTION...] [-f encoding] [-t encoding] [inputfile ...] iconv -l

June 22, 2016 · 1 min · 50 words · itibbers

Go-Pholcus抓人民网新闻规则

Go 语言下有个爬虫软件 pholcus,写了个爬虫的规则,抓的是人民网的最新新闻和 IJGUC 所有期刊。 pholcus 开源软件做的还是挺棒的,但是觉得 go 语言不太好玩。 规则放到了Github ...

April 21, 2016 · 4 min · 662 words · itibbers

Composer安装时openssl missing

问题描述:“The openssl extension is missing, which means that secure HTTPS transfers are impossible.” 确保 php.ini 中 extension=php_openssl.dll 打开。 php.ini 文件在 apache 和 php 目录下都有,建议都打开。

March 15, 2016 · 1 min · 24 words · itibbers

python - RuntimeError: maximum recursion depth exceeded

用 Python 写了一个爬虫脚本,在抓取页面采用广度优先遍历抓取。但是当遍历到 900 多时就会出现莫名其妙的错误,通过 pdb 调试发现是: RuntimeError: maximum recursion depth exceeded 在网上查了,发现 python 默认的递归深度是很有限的,大概是 900 多的样子,当递归深度超过这个值的时候,就会引发这样的一个异常。 解决的方式是手工设置递归调用深度,方式为 import sys sys.setrecursionlimit(1000000) # 例如这里设置为一百万

September 27, 2015 · 1 min · 23 words · itibbers