关闭

扯谈网络编程之Tcp SYN flood洪水攻击

简介 TCP协议要经过三次握手才能建立连接: (from wiki) 于是出现了对于握手过程进行的攻击。攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。攻击者如果处于公网,可以伪造IP的话,对...
阅读(15677) 评论(5)

ZPush--基于netty4实现的苹果通知推送服务(APNs)Java客户端

简单说下实现苹果通知推送服务(APNs)客户端的一些要注意的地方: 使用长连接;sanbox服务器是没用的,调试时直接用“gateway.push.apple.com”域名;对于错误的Notification,苹果会回应一个Error response,里面有个identifier,在这个identifier之后的Notification全都失败; 因此发送者要缓存已经发送的Not...
阅读(6907) 评论(11)

蛋疼的Apple IOS Push通知协议

简介 Apple Push通知机制其实很简单,就是Apple的APNs服务器做为中间人,把消息推送到对应的设备上。 一张来自Apple文档的图: 当然,示意图看起来简单,但是还有一些实际的问题。 比如,如何区分Provicer的?如何区分设备的? 简单而言,是这样的: 每个应用都有一个自己的证书(certificate),开发者可以从苹果那里获得;应用可以到APNs服务...
阅读(7416) 评论(0)

用KGdb和VMware调试Linux内核,System Call

Linux的内核和System Call不好调试,参考这里: http://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-code 简单来说,如果想在本机调试system call,那么当你进入system call时,系统已经在挂起状态了,那么它又怎样能响应用户的输入? 所以,有一个UML...
阅读(3000) 评论(0)

JVM GC调优一则--增大Eden Space提高性能

缘起 线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。 思路 思路是Tomcat本身的代码应该是没有问题的,有问题的可能是应用代码升级,或者环境改变了,总之Tomcat的优先级排在最后。 先把应用的heap dump下来分析下: jmap -dump:format=b,file=path pid 用IB...
阅读(26919) 评论(1)

扯谈网络编程之自己实现ping

ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的。 ping实际上是发起者发送一个Echo Request(type = 8)的,远程主机回应一个Echo Reply(type = 0)的过程。 为什么用ping不能测试某一个端口 刚开始接触网络的时候,可能很多人都有疑问,怎么用ping来测试远程主机的某个...
阅读(4038) 评论(0)

Apache HttpClient 没有设置time out导致应用长时间阻塞的问题

现在的对外接口一般都是Http + json的,因为简单,语言无关。 Apache HttpClient应该是最常用的Java http组件了。这货有个坑爹的地方,Apache HttpClient如果对方不回应,或者网络原因不返回了,那么HttpClient会一直阻塞。这种情况在公网可能比较容易碰到。在内网时,也有一次因为一台中转的nginx挂掉而导致hessian请求长时间阻塞。 因为Ht...
阅读(14670) 评论(2)

利用redis缓存热门数据,分页的一种思路

普通分页 一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。 如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。 比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。 一种思路 最近想到了另一种思路。 数据以ID为key缓存到Redis里; 把数据ID和排序打分存到Redis的skip list,即zset里;...
阅读(23158) 评论(0)

在Java里处理文件的技巧

写这篇Blog,主要是因为看到太多的凌乱的,不安全的处理文件的代码了。甚至可以说每个项目都会有人喜欢写自己的一些FileUitl。。 下面介绍一些利用JDK7标准库来灵活处理文件的方法。 实用的工具类,Path,Paths,Files,FileSystem  有一些很灵活的处理方法:  //得到一个Path对象 Path path = Paths.get("/test/a.txt"...
阅读(10955) 评论(0)

为什么在Spring的配置里,最好不要配置xsd文件的版本号

为什么dubbo启动没有问题? 这篇blog源于一个疑问: 我们公司使了阿里的dubbo,但是阿里的开源网站http://code.alibabatech.com,挂掉有好几个月了,为什么我们的应用启动没有问题? 我们的应用的Spring配置文件里有类似的配置: <beans xmlns="http://www.springframework.org/schema/beans" xml...
阅读(37417) 评论(5)

应对Memcached缓存失效,导致高并发查询DB的几种思路

当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升。 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询。 个人认为,当缓存将要失效时,及时地把新的数据刷到memcached里,这个是解决缓存失效瞬间高并发查DB的最好方法。那么如何及时地知道缓存将要失效? 解决这个问题有几种思路: 比如一个key是...
阅读(11356) 评论(9)

Web API 版本控制的几种方式

http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html 这篇文章写得很好,介绍了三种实现web api版本控制的三种方式。我从评论里又收集到两种方式,所以一共是5种: 方式一:利用URL HTTP GET: https://haveibeenpwned.com/api/v2/breachedacc...
阅读(22907) 评论(11)

扯谈下XA事务

普通事务的实现是比较好理解的。以jdbm3为例,大概是这样的过程: 每个事务都新建一个事务文件,当commit时,先把修改过的数据块,写到事务文件里,然后再一次性地写到数据库文件里。 如果commit时挂掉了,那么重启之后,会再次从事务文件里把修改过的块写到数据库文件里。最后再删除事务文件。 https://github.com/jankotek/JDBM3 但是XA事务,即所...
阅读(13988) 评论(2)

利用redis + lua解决抢红包高并发的问题

抢红包的需求分析 抢红包的场景有点像秒杀,但是要比秒杀简单点。 因为秒杀通常要和库存相关。而抢红包则可以允许有些红包没有被抢到,因为发红包的人不会有损失,没抢完的钱再退回给发红包的人即可。 另外像小米这样的抢购也要比淘宝的要简单,也是因为像小米这样是一个公司的,如果有少量没有抢到,则下次再抢,人工修复下数据是很简单的事。而像淘宝这么多商品,要是每一个都存在着修复数据的风险,那如果出故障了则很...
阅读(95367) 评论(27)

抢红包的红包生成算法

过年微信红包很火,虽然我没有抢过,但是有个项目也要做抢红包,于是写了个红包的生成算法。 红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。 最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)范围...
阅读(44203) 评论(15)
160条 共11页首页 上一页 1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:1582149次
    • 积分:11421
    • 等级:
    • 排名:第1415名
    • 原创:129篇
    • 转载:29篇
    • 译文:2篇
    • 评论:342条
    博客专栏
    文章分类
    最新评论