听到微笑的博客

  • 布隆过滤器在缓存系统中的实践
    布隆过滤器在缓存系统中的实践
    | 数据结构与算法
    评论 0 | 点赞 0 | 预览 294
    在业务开发中,如果遇到并发量很高的情况下,通常会使用缓存对系统查询性能进行优化,在缓存命中率很高的情况下,缓存的使用能够大幅提升系统查询性能。但是在缓存命中率非常低场景下,如果采用传统缓存读取模式,大部分的请求会穿透至数据库,造成数据库的巨大压力。
  • 开发中你不得不知的一个Git小技巧
    开发中你不得不知的一个Git小技巧
    | 其他
    评论 0 | 点赞 0 | 预览 411
    在工作中大家应会碰到需要频繁在两个分支中切换工作的情况,我们通常做法是利用git stash命令暂存当前工作区中的变更,然后git checkout到目标分支中工作,工作完成后回到刚刚分支使用git stash pop命令还原历史工作区变动
  • tcc-transaction源码详解
    tcc-transaction源码详解
    | 分布式事务 源码分析
    评论 0 | 点赞 0 | 预览 356
    本文主要介绍TCC的原理,以及从代码的角度上分析如何实现的;不涉及具体使用示例。本文通过分析tcc-transaction源码带大家了解TCC分布式事务的实现原理。需要注意的是,本文所有代码都基于master-1.7.x分支,不同版本的源码会存在一定的差异。完整代码注释请参考:bigcoder84/
  • 详解进程Fork
    详解进程Fork
    | 其他
    评论 0 | 点赞 0 | 预览 299
    一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
  • 深入理解Docker容器技术
    深入理解Docker容器技术
    | Docker
    评论 0 | 点赞 0 | 预览 747
    容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。**对于 Docker 等大多数 Linux 容器来说,Cgroups 技术是用来制造约束的主要手段,而Namespace 技术则是用来修改进程视图的主要方法**。你可能会觉得 Cgroups 和 Namespace 这两个概念很抽象,别担心,接下来我们一起动手实践一下,你就很容易理解这两项技术了。
  • synchronized锁升级过程
    synchronized锁升级过程
    | 并发编程
    评论 0 | 点赞 0 | 预览 597
    JDK 1.6后锁的状态总共有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁,这四种锁状态分别代表什么,为什么会有锁升级?其实在 JDK 1.6之前,synchronized 还是一个重量级锁,底层使用操作系统的 Mutex Lock(互斥锁)实现,而操作系统实现线程之间的切换需要从用户
  • 记一次线上内存泄露排查
    记一次线上内存泄露排查
    | 其他
    评论 0 | 点赞 1 | 预览 379
    前不久测试环境一直无缘无故的挂掉,这可苦了我们一线开发人员,每次测试都得把挂掉服务全部起起来。面对几十个微服务模块,我想大家看到这样的场景内心也是一万个草泥马飞过….
  • 探寻Dubbo集群容错机制
    探寻Dubbo集群容错机制
    | Dubbo
    评论 0 | 点赞 0 | 预览 535
    Dubbo默认使用的是Failover Cluster机制,如果不清楚这一机制那么写出的代码会有很多隐患。 服务的超时是开发人员不好控制的,如果某些时候因为机器负载波动导致一个写操作服务发生超时重试,那么就会出现重复写的问题,导致脏数据的产生。 Failover Cluster官方建议在读环境下使用,但是奈何很多同学都没有注意到这一点。
  • 使用OpenVPN搭建虚拟专用网
    使用OpenVPN搭建虚拟专用网
    | 网络
    评论 1 | 点赞 0 | 预览 5061
    先说说自己搭建VPN的初衷,作为一个社畜在上海栖息之地是一间合租的卧室,房间虽小也抑制不住自己爱折腾的毛病,前不久自己在网上淘了一个M72主机,这个主机挺适合在家里当一个服务器,主要是因为它是I3处理功耗相对较低还是X86架构,相比用树莓派当服务器,不仅算力更强软件兼容性以及硬件可扩展性也更好。
  • Java SPI详解
    Java SPI详解
    | Java
    评论 0 | 点赞 0 | 预览 512
    SPI的英文全称为Service Provider Interface,字面意思为服务提供者接口,它是jdk提供给“服务提供厂商”或者“插件开发者”使用的接口。在面向对象的设计中,模块之间我们一般会采取面向接口编程的方式,而在实际编程过程过程中,API的实现是封装在jar中,当我们想要换一种实现方法
  • 云原生时代,Java 的危与机(转)
    云原生时代,Java 的危与机(转)
    | 其他
    评论 0 | 点赞 0 | 预览 459
    Java 诞生距今已有 25 年,但它仍然长期占据着“天下第一”编程语言的宝座。只是其统治地位并非坚不可摧,反倒可以说是危机四伏。云原生时代,Java 技术体系的许多前提假设都受到了挑战,目前已经有可预见的、足以威胁动摇其根基的潜在可能性正在酝酿。同时,像 Golang、Rust 这样的新生语言,以及 C、C++、C#、Python 等老对手也都对 Java 的市场份额虎视眈眈。面对危机,Java 正在尝试哪些变革?未来,Java 是会继续向前、再攀高峰,还是由盛转衰?
  • 编辑距离(Levenshtein Distance)
    编辑距离(Levenshtein Distance)
    | 数据结构与算法
    评论 0 | 点赞 0 | 预览 750
    Levenshtein Distance,一般称为编辑距离(Edit Distance,Levenshtein Distance只是编辑距离的其中一种)或者莱文斯坦距离,算法概念是俄罗斯科学家弗拉基米尔·莱文斯坦
  • 网络广告代理商是如何通过 Cookie 收集用户信息的
    网络广告代理商是如何通过 Cookie 收集用户信息的
    | 其他
    评论 1 | 点赞 0 | 预览 474
    不知道大家有没有这样的经历,我在某宝上搜索一个商品,然后再打开其它网站,它会非常“智能”的给我推荐同一商品。这样的操作大多都是因为Cookie在搞鬼,在了解厂商这些骚操作前,我们先了解一下浏览器的同源策略。一. 同源策略由于浏览器默认的同源策略只能获取到“自己”的Cookie。所谓的同源策略就是指A
  • Windows系统命令行的最佳实践
    Windows系统命令行的最佳实践
    | 其他
    评论 1 | 点赞 0 | 预览 1004
    每次看到Mac生态中炫酷的命令行工具,我就一脸羡慕,但是奈何财力不足,整不起动辄上万的电脑,搬砖人就只能折腾折腾手里的这台windows了。
  • 最长回文子串-动态规划
    最长回文子串-动态规划
    | 数据结构与算法
    评论 0 | 点赞 0 | 预览 481
    对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。例如对于字符串ababa,如果我们已经知道bab是回文串,那么ababa一定是一个回文串,因为它首尾两个字母都是a。
  • 详解时间复杂度
    详解时间复杂度
    | 数据结构与算法
    评论 0 | 点赞 0 | 预览 455
    一. 为什么需要复杂度分析你可能会有些疑惑,我把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢?这种分析方法能比我实实在在跑一遍得到的数据更准确吗?这种评估算法执行效率的方法是正确的。但是这种统计方法有非常大的局限性。1. 测试的结果依赖测试的
  • Redmi AC2100路由器刷老毛子固件
    Redmi AC2100路由器刷老毛子固件
    | 网络
    评论 0 | 点赞 0 | 预览 3169
    最近搭建集群,为了方便的全局自定义DNS记录,并且各节点需要科学上网,所有就萌生了刷路由器固件的想法。网上翻阅了一些资料最终选择了”老毛子“固件。
  • DockerSwarm架构详解
    DockerSwarm架构详解
    | Docker
    评论 1 | 点赞 0 | 预览 717
    Docker Swarm提供了基本的集群能力,能够使多个Docker Engine组合成一个group,提供多容器服务。Swarm使用标准的Docker API,启动容器可以直接使用docker run命令。一. 基本架构Docker Swarm提供了基本的集群能力,能够使多个Docker Engi