JavaScript 侦测手机浏览器的五种方法

有时候,前端网页需要知道,用户使用的是手机浏览器还是桌面浏览器。 本文根据 StackOverflow,整理了 JavaScript 侦测手机浏览器的五种方法。 一、navigator.userAgent 最简单的方法就是分析浏览器的 user agent 字符串,它包含了设备信息。 JS 通过navigator.userAgent属性拿到这个字符串,只要里面包含mobi、android、iphone等关键字,就可以认定是移动设备。 if (/Mobi|Android|iPhone/i.test(navi… Read More »

C/C++中宏的#和##的用法

1.一般用法 使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起 #include<cstdio> #include<climits> using namespace std; #define STR(s)     #s #define CONS(a,b)  int(a##e##b) int main() {     printf(STR(vck));           // 输出字符串”vck”     printf(“%d/n&#8… Read More »

如何在一周内摸清一个行业

如何在一周内摸清一个行业? 一周之内真的能摸清一个行业?    在和咨询、投行、投资、猎头这些行业的人聊天的时候,我反复听到“一周”这个时间,于是我也开始好奇:你们是在什么情况下需要在一个星期之内了解一个行业?你们都是如何做到在一个星期之内摸清一个行业的?    在一周之内“摸清”一个行业依然不可能成为这个行业的顶尖专家,也不可能成为这个行业的一个高管。但是,你能了解一个行业的全局,现今状况、过去、未来一段时间内可能的发展趋势,熟悉那个行业的行话,拿捏这个行业的基本信息。     这有什么用?    你能… Read More »

bash计数

在统计数据的时候发现一直出错:)syntax error: invalid arithmetic operator (error token is “ 原因是变量中还有特殊字符,如本来$cnt是5的,实际上却是5\r。将\r这种特殊字符去掉即可:${cnt//$’\r’} 完整bash脚本:用法(./search.sh file string) #! /bin/bash echo “file:” $1 string: $2 sum=0 grep … Read More »

中国梦与中国制度模式

同一个世界,不同的梦想     美国梦:把所有美国人团结在一起,盛衰相与,荣辱与共。独立宣言是其根基。马丁•路德金:我有一个梦想 中国梦历史缘起与曲折发展      唐朝,太平天国运动,李鸿章为首的洋务运动,维新变法,孙中山为首的同盟会、辛亥革命,康有为的君主立宪:空想社会主义       三民主义:小资产阶级理论,共和梦 为什么提出中国梦     中国特色社会主义不断发展,中国价值体现 中国梦内涵与价值     小康社会,特色社会主义道路,

摄像头安全方案

摄像头安全防护方案分成几部分: 设备层:保护硬件设备安全 硬件防拆 硬件模块互绑定 系统层:保护摄像头设备安全 使用安全芯片等敏感数据安全,进行安全认证; 应用层:保护设备网络安全 网络权限控制(连接需要经过认证、禁止访问非法地址等); 摄像头访问控制 安全管理sdk 数据流加密保护 相关方案参考: 路由器与手机间端到端加密,不需要改造摄像头和应用 http://www.ndss-symposium.org/wp-content/uploads/sites/25/2018/02/ndss2018poste… Read More »

常见验证码的弱点与验证码识别

0x00 简介 验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助。 全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCH… Read More »

(转载)最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可用、可扩展的分布式消息中间件,类似于LinkedIn的Kafka,具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用 于大吞吐量、顺序消息、广播和日志数据传输等场景,在淘宝和支付宝有着广泛的应用,现已开源。 Metamorphosis是淘宝开源的一个Java消息中间件。关… Read More »

oops-tracing

NOTE: ksymoops is useless on 2.6.  Please use the Oops in its original format (from dmesg, etc).  Ignore any references in this or other docs to “decoding the Oops” or “running it through ksymoops”.  If you post an Oops from 2.6 th… Read More »

Tickness Kernel

据统计大部分服务器在 85% 的时间里一直处于空闲状态,但是处理器仍然保持运行。换句话说,处理器始终在寻找并执行任务 — 有时甚至达到每秒 1,000 次。只要系统时钟不变,处理器就一直处于全速运行状态。 Green Linux Workgroup 及其合作伙伴的一个关键进展就是研发了无滴答内核。如前所述,在空闲状态下,GNU/Linux 内核会一直寻找可执行的任务。通常,一个内核每 4ms 就会引发一个时钟中断,以检查是否需要调度新的任务。内核 2.6.21 引入了无滴答内核,它将在需要调度新任务时执行… Read More »

RCU

一、 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,也就说获得锁的开销与访存速度相关,另外在大部分非x86架构上获取锁使用了内存栅(Memory Barrier),这会… Read More »

MCS SpinLock

引言 自旋锁(Spinlock)是一种在 Linux 内核 [1] 中广泛运用的底层同步机制,长期以来,人们总是关注于自旋锁的安全和高效,而忽视了自旋锁的“公平”性。排队自旋锁(FIFO Ticket Spinlock)是内核开发者 Nick Piggin 在Linux Kernel 2.6.25 版本中引入的一种新型自旋锁,它通过保存执行线程申请锁的顺序信息解决了传统自旋锁的“不公平”问题 [4]。 排队自旋锁仍然使用原有的 raw_spinlock_t 数据结构,但是赋予 slock 域新的含义。为了… Read More »

关于TTY

TTY应该说是TeleTYpe的缩写,teletype中文叫做“电传打字机”,最初被用于传输一些商业电报。当计算机技术发展起来之后,teletype被用于了其输入输出设备。对于多种teletype模型的存在,操作系统内核对一些底层的细节进行了封装,比如word length(字长), baud rate(波特率), flow control(流控制), parity(奇偶校验), 以及一些基本行编辑(line editing)的控制码(control code)。而对于一些比如Fancy cursor m… Read More »

Continuation-Passing Style

 说起Continuation,象我这样的大多数从C, Basic, Pascal起步的程序员可能都不清楚。但是 这个概念在functional language 社区却好象是常识一样,很多人在讨论问题的时候总是假设你已经知道了continuation的基本概念,什么Call-CC什么的都不加解释就直接引用。于是,如果不知道continuation到底指的是什么,简直就无法理解他们在说什么。     于是,最近花了点时间研究了continuation的概念。   刚才恍然小悟了MonadCont… Read More »

cache server 问题总结

这周,我们的 cache server 服务面临了很多的挑战。项目资源超过了 30G ,有几十个用户在同时使用。每天都有版本切换工作(导致重新上传下载 30G 的数据)。在这个过程中,我对 cache server 程序修修补补,终于没有太大的问题了。 总结一下,我认为 cache server 的协议设计,以及 Unity 客户端实现,均存在很大的问题。这些问题是无法通过改进服务器的实现彻底解决的,只能做一些缓解工作。真正的完善必须等 Unity 的客户端意识到这些问题并作出改进。 cache serv… Read More »

wait(), notify(), notifyAll() in Java

use same object for calling wait() and notify() method, every object has its own lock so calling wait() on objectA and notify() on object B will not make any sense. by calling notify(), the awakened thread will not be able to proceed until the current thr… Read More »

java: instanceof, isinstance,isAssignableFrom的区别

instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。如果被测对象是null值,则测试结果总是false。 形象地:自身实例或子类实例 instanceof 自身类  返回true 例: String s=new String(“javaisland”);       System.out.println(s instanceof String); //true Class类的isInstance(Object obj)方法,obj… Read More »

Java Garbage Collection Distilled

Serial, Parallel, Concurrent, CMS, G1, Young Gen, New Gen, Old Gen, Perm Gen, Eden, Tenured, Survivor Spaces, Safepoints, and the hundreds of JVM startup flags. Does this all baffle you when trying to tune the garbage collector while trying to get the req… Read More »

Java pass int by reference

最近写Android App时候发现Java的Integer是不能传引用的: public static void invokeModify(Integer res){ System.out.println(“invokeModify:”+res.intValue()); Integer res1 = new Integer(100); res = res1; System.out.println(“invokeModify:”+res.intValue()… Read More »

基于UDP实现多媒体即时通信机制

最近有个项目需要仿照QQ设计一个高性能即时通信应用,其中涉及到传输图片、视频、大块文字的需求。为了实现高性能的同时减少带宽占用,我们参考了QQ通信协议以及Google Protocol Buffers的精简设计理念设计了一套基于UDP的多媒体即时通信机制,达到低带宽、高性能的效果。 QQ通信协议 QQ在即时通信应用中并没有采用XMPP、HTTP等上层的协议进行消息通信,主要是基于效率的考虑:XMPP、HTTP等上层的传输协议为了保证易用性、通用性,包含了太多对应用无用的数据,从带宽、性能方面而言并不是特别… Read More »

防止深度包检测的一个方法

虽然以现在的加密技术,主要选择的加密算法没问题,在很长一段时间都不太用担心监听通讯的人解密获得明文。但是针对特定的加密通讯协议,还是很可能找到方法找到某种模式。这个模式不能转换为明文,但可以猜测出你是否在使用特定协议。 另外,无论你怎么加密通讯,访问特定服务流量的时间特征也可能泄露你的秘密:用什么节奏通讯,每个 ip 包多大,这些都是可供匹配的特征。 我认为,大多数情况下,通讯的稳定性是大于带宽的需求的。那么,采用本文这种方法应该能去掉上面这些流量特征。 先说说流量的时间特征。 所谓时间特征,就是通讯流量… Read More »

UDP丢包和无序问题的解决方法探索

最近在做一个项目,在这之前,做了个验证程序. 发现客户端连续发来1000个1024字节的包,服务器端出现了丢包现象. 纠其原因,是服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了. 我用过sleep(10),暂时解决这个问题,但是这不是根本解决办法,如果数据量大而多,网络情况不太好的话,还是有可能丢失. 你试着用阻塞模式吧… select…我开始的时候好像也遇到过..不过改为阻塞模式后就没这个问题了…   采用回包机制,每个发包必须收到回包后再发下一… Read More »

为什么 skynet 提供的包协议只用 2 个字节表示包长度

skynet 提供了一个 lua 库 netpack ,用来把 tcp 流中的数据解析成 长度 + 内容的包。虽然使用 skynet 的同学可以不使用它,而自己另外实现一套解析协议来解析外部 TCP 数据流(比如 skynet 中的 redis driver 解析 redis server 的数据流就是用的换行符分割包),但依然有很多同学询问,能不能自定义包头长度。 这里的这个库定义的协议中,包长度是用 big-endian 的 2 个字节表示的,也就是说一个包的长度不得超过 64K 。这让很多人很为难。… Read More »

在移动网络上创建更稳定的连接

在移动设备上开发游戏需要克服的两大技术难点: 移动网络的不稳定性以及手机硬件资源的约束。由于开发时间所限,第一点我们并没有专门去做。 我一直不想动手去做一个临时方案解决 TCP 断线重连问题,因为实现一个 TCP over TCP 是没有太大意义的。移动网络发展迅速的今天,整个行业都在努力提高移动网络的稳定性,所以费力做这个事情很可能在两年之后就变得完全没有必要。 比如,iOS 7.0 发布 后,让 MultiPath TCP 技术为更多人所知。从许多中文资料对其的解读,主要集中在 MPTCP 提供了更大… Read More »

可靠 UDP 传输

本文分三个部分:一,什么时候有可能采用 UDP 通讯而不是用 TCP 更好;二,一个可靠的 UDP 通讯模块的 API 接口该如何设计;三,一个简单的实现。 首先,我一直是非常反对在 UDP 协议上实现一个可靠传输协议的,即类似 TCP over UDP 的东西。 TCP 已经够复杂了,几乎不太可能重新设计的更好。如果用 UDP 再实现一个可靠传输协议,而表现的比 TCP 效果更好,那么多半只是在部分情况下的优势;或是霸道的占用了过量的资源,而 TCP 在设计时则是很友好的,以整个网络的通畅为更高准则的。… Read More »

High performance design problem

Introduction The purpose of this document is to share some ideas that I’ve developed over the years about how to develop a certain kind of application for which the term “server” is only a weak approximation. More accurately, I’ll … Read More »

高性能服务器编程目录

一基本方法篇 high-performance server architecture–Jeff Darcy  [http://pl.atyp.us/content/tech/servers.html ] 总结分析了影响服务器性能的四大杀手: 数据拷贝(Data Copies); 环境切换(Context Switches); 内存分配(Memory allocation);  锁竞争(Lock contention)。 1网络模型  阻塞/非阻塞;  同步/异步;  IO 复用;  长连接/… Read More »

What need to be done to tune networking stack (WIP)

End host Tunables hw.igb.max_interrupt_rate – loader tunable limiting maximum number of interrupts per second generated by single igb(4)-driven NIC. Default value is 8000 and is too low; you may want to increase it upto 32000 or more. net.inet.tcp.t… Read More »

Pktgen测试

安装 $modeprobe pktgen 遇到“Could not open moddep file ‘/lib/modules/XXX/modules.dep.bin’”是dep问题,一般是由于kernel变后导致module依赖不对,可试着$sudo apt-get install –reinstall linux-image-3.13.0 or 运行$depmod -a后就可以了。 从github上下载example的script: https://github.… Read More »