遇见sharon ’ 的文章存档

对于程序员说的话,项目经理们是这样理解的

bbb

 

程序员:就目前的设计,我大概一周内就可以搞定基本框架。然后我们从头再优化整理、完善设计, 在接下来的一周提交一个稳定的版本。
项目经理的理解:整个项目只要两个礼拜就可以搞定。

程序员:是的,我可以写一些Web服务,通过这个服务,其他的开发人员能够与我们的系统进行交互。
项目经理的理解:他一人就可以构建出一个每分钟能够承受百万用户的负载均衡Web服务网站。

程序员:我们需要和下一版本负责人开个会,告诉他们除非有合适的构建部署服务器,我们无法按时完成项目。
项目经理的理解:没戏了!(泪奔中。。。)
阅读全文

深入剖析 redis 数据淘汰策略

概述

在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。

redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:

  1. volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  4. allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  5. allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  6. no-enviction(驱逐):禁止驱逐数据

redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

LRU 数据淘汰机制

在服务器配置中保存了 lru 计数器 server.lrulock,会定时(redis 定时程序 serverCorn())更新,server.lrulock 的值是根据 server.unixtime 计算出来的。
阅读全文

python 多线程日志切割+日志分析

楼主最近刚刚接触python,还是个小菜鸟,没有学习python之前可以说楼主的shell已经算是可以了,但用shell很多东西实现起来还是不可能的事情,例如最明显的一点大日志分析,由于楼主的公司,每天的日志量很大,用shell分析的会非常非常的慢。

通过学习python,楼主有了一种想法,想法如下

可不可以分割日志,把日志分割成很多的小块,利用多线程去分析日志,这个难点在哪,难点就在如何去分割日志,前几篇文件楼主写过日志分割的python版,但是存在很大的弊端,只能够针对小日志进行分割,因为上一篇是把日志先写到列表中,大家都知道列表时要站内存的,那如果说日志很大,岂不一下就把内存吃满了。废话就不多说了,楼主来阐明下如何解决此问题
阅读全文

C\C++代码优化的27个建议

1. 记住阿姆达尔定律

b1

 

  • funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。
  • 所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。
  • 这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。
  • 这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。

2. 代码先保证正确,然后再考虑优化

  • 这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。
  • 分多步来做性能优化。
  • 先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。
  • 然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。所有频繁调用的函数,都需要优化。

3. 我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。

4.跳转和分支执行代价高,如果可能,尽量少用。

  • 函数调用需要两次跳转,外加栈内存操作。
  • 优先使用迭代而不是递归。
  • 使用内联函数处理短小的函数来消除函数调用开销。
  • 将循环内的函数调用移动到循环外(例如,将for(i=0;i<100;i++) DoSomething();改为DoSomething() for(i=0;i<100;i++) … }})。
  • if…else if…else if…else if…很长的分支链执行到最后的分支需要很多的跳转。如果可能,将其转换为一个switch声明语句,编译器有时候会将其转换为一个表查询单次跳转。如果switch声明不可行,将最常见的场景放在if分支链的最前面。

阅读全文

Linux的五个查找命令

作者: 阮一峰

 

最近,我在学习Linux,下面是一些笔记。

使用电脑的时候,经常需要查找文件。

在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。
阅读全文

2014年值得学习的编程语言书

经过数据分析和研究 Jobs Tractor 的 45000 个开发人员招聘职位数据,我们得到了上图的结果: 自上一年,主要的变化如下:

ggg
阅读全文

linux curl 命令详解,以及实例

linux curl是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具。
阅读全文

如何用最有创造力的方式输出42

作者:陈皓

文章来自:酷壳网

————————————————–

这篇文章来自CodeGolf.StackExchange上的《Most creative way to display 42》—— 请以最有创造力的方式输出42。于是出现了下面的这些答案(注:精彩的总是留在最后面)

人生和宇宙终级问题的答案:42

这里,需要介绍一下为什么要输出42。这时因为42是我们人生,世界乃至整个宇宙的终级答案。这要从《银河系漫游指南》(英文名:The Hitchhiker’s Guide to the Galaxy)说起。这本书是著名英国科幻小说作家Douglas  Adams所著5本银河系漫游指南系列科幻喜剧系列小说中的第一本,改编自他本人为英国广播公司第四电台(BBC Radio 4)所写的广播剧剧本。该书1979年10月12日首次由麦克米伦出版公司(Pan Books)出版,次周成为英国图书销量榜冠军,前3个月内销售超过25万本。截至2005年,这本小说已被翻译成超过30种语言在全世界发行,并且被改编为电视剧、电影、舞台剧等多种艺术形式的作品。
阅读全文

GlusterFS集群文件系统研究

作者:刘爱贵

1.      GlusterFS概述

 

GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。

a1

 

图1 GlusterFS统一的挂载点

GlusterFS支持运行在任何标准IP网络上标准应用程序的标准客户端,如图2所示,用户可以在全局统一的命名空间中使用NFS/CIFS等标准协议来访问应用数据。GlusterFS使得用户可摆脱原有的独立、高成本的封闭存储系统,能够利用普通廉价的存储设备来部署可集中管理、横向扩展、虚拟化的存储池,存储容量可扩展至TB/PB级。GlusterFS主要特征如下:
阅读全文

如何写出更好的Java代码

Java是最流行的编程语言之一,但似乎并没有人喜欢使用它。好吧,实际上Java是一门还不错的编程语言,由于最近Java 8发布了,我决定来编辑一个如何能更好地使用Java的列表,这里面包括一些库,实践技巧以及工具。

这篇文章在GitHub上也有。你可以随时在上面贡献或者添加你自己的Java使用技巧或者最佳实践。

  • 编码风格
    • 结构体
      • builder模式
    • 依赖注入
    • 避免null值
    • 不可变
    • 避免过多的工具类
    • 格式
      • 文档
      • Stream
  • 部署
    • 框架
    • Maven
      • 依赖收敛
    • 持续集成
    • Maven仓储
    • 配置管理
    • 遗失的特性
      • Apache Commons
      • Guava
      • Gson
      • Java Tuples
      • Joda-Time
      • Lombok
      • Play framework
      • SLF4J
      • jOOQ
    • 测试
      • jUnit 4
      • jMock
      • AssertJ
  • 工具
    • IntelliJ IDEA
      • Chronon
    • JRebel
    • 校验框架
    • Eclipse Memory Analyzer
  • 资源
    • 书籍
    • 播客

编码风格

传统的Java编码方式是非常啰嗦的企业级JavaBean的风格。新的风格更简洁准确,对眼睛也更好。
阅读全文