澳利在线-淘股配资开户-海通期货有限公司 http://xfpz180.cn 技术、生活、感?/description> Thu, 18 Jul 2019 06:32:39 +0000 zh-CN hourly 1 http://wordpress.org/?v=5.4.2 京融实配-宁波外汇配资-厦门国贸期货 http://xfpz180.cn/blog/741 http://xfpz180.cn/blog/741#respond Thu, 21 Dec 2017 15:40:44 +0000 http://xfpz180.cn/?p=741 我的2017书单 阅读更多 »

]]>
前言

今年比以往不同的是,看了比较多的书,当然都是浅看,不是工具书我一般都不来回看,看完一遍就在脑子里过一下,也不强求能学到什么知识,只要能从在学到一些新的体会就达到看书的目的了。没错,看书还是要带着目的看的?/p>

大多数书都是用微信读书看的,纸质的也有,但比较少,因为手机在任何地方任何地点都能看,压榨空隙时间第一选择。微信读书的体验还是很不错的,功能简单,而且可以通过读书时长获取读书币,然后读书币可以买更多的书,良性循环?/p>

接下来介绍下每本我看过的书和一些心得体会吧?/p>

我的2017书单

NO1. 《刻意练习? ? class=? class=? class=? class=? class=
这本书是讲一些高效的学习方法的,就是想要高效的学习并深入,除了努力之外,我们还需要带着明确的目标,配套合适的方法,才能做到短时间内领悟更多?这本书还有一个观点是,天才并不存在的,很多我们看到的天才,只不过是他们在很小的时候,通过《刻意练习》的方法,让自己在某一领域深入掌握各种技巧而已。当然,刻意练习并不简单,需要考验你的耐心,方法以及能指导你的老师(高人)?F法则(Focus、Feedback、Fix)已成为我的座右铭:)。总之,这本书比《一万小时理论》更值得一?/p>

NO2. 《腾讯传? ? class=? class=? class=? class=
这本书就是讲腾讯的发家史,当然写的看似波澜不惊,但是每一段波澜不惊的创业背后都是创业者苦逼的持久战。创始人对公司文化的影响极其深远,创业除了碰运气,还要在浪潮来之前准备好姿势(这需要比常人多十倍、百倍的努力),踏浪而上,成为弄潮儿。另外一点是创业者需要不断的居安思危,不能看到眼前有收入可以养活团队就能『躺着赚钱』了,灾难来临的时候从来不会告诉你,你跟其他公司的区别就是能不能顺利度过去?/p>

NO3. 《资本的逻辑? ? class=? class=? class=
这本书不建议看电子版,因为电子版制作很粗糙,很多数据图表都没有了,而且小数点也没有,所以会经常看到一些奇怪的巨额数字,需要自己去脑补实际的金额。最重要的一句话:企业的估值是向前看,而不是向后看?估值就是对未来的期望值?/p>

NO4. 《未来简史? ? class=? class=? class=? class=? class=
江西股票期货配资炒股 这本书可以和《奇点临近》一起看,预测在不远的未来,随着超级人工智能降世,人来的价值观会发生什么样的变化。从科学的角度讲,人类本身没什么意义,都是一堆算法和随机过程的组合而已,人类的这几百万年的进化,极有可能是为了唤醒地球上的超级人工智能生命体而已(远古的天外文明埋下的种子,哈哈)。未来,如果人类和超级人工智能结合之后,不再死亡,也不再有肉体,那么我们现在的宗教里面天堂、地狱、神都不再有意义,那么,这些有神论者,该如何自处?

NO5. 《即将到来的场景时代? ? class=? class=? class=? class=
传感?+ 物联?组成的雾计算,以及以云计算为基础的ai技术,通过整合人类的各种数据,做到书中描述的场景时代并不难,难的是道德上的变革:隐私数据该不该共享?数据的所有权、隐私问题、网络安全问题,这几大问题没有好好的解决,还是很难铺开。当然,可以接受的是,新技术的变革和流行,反过来推动这些问题的解决(或者更大的利益来抵消损失的权益?/p>

NO6. 《人民的名义?? class=? class=? class=? class=
这个不多说,一切为了剧透? 这本书(或者这部剧)名义上是以『人民的名义』写反腐,实际上是以反腐的名义写当代中国官场现形记?主角和他的盆友们都是官二代、红二代,很容易形成抱团取暖、勾心斗角?/p>

NO7. 《奇点临近? ? class=? class=? class=? class=? class=
技术正在加速进化,我们处在变化中,如果看的时间不够长,会以为是比较常规的线性变化,而把时间轴拉长,会发现我们正处于技术变革的指数曲线上。我们正在走向变革的奇点。如果不抓住机会乘势而上,那我们之于即将到来的超级人工智能就像尼安特人至于现代智人一样,将会被灭族!不过作者对强人工智能总体上是比较乐观的,认为生物智能(比如人类)和非生物智能可以完美结合,和谐相处,合体之后变成全新的超人类(感觉在看龙珠Z)。技术的进步总会带来一些毁灭,但阻止技术进步并不能阻止毁灭的降临,所以我们应该更加加大力度发展技术,让毁灭来临之前,我们人类的技术可以与之抗衡?/p>

计算机终将拥有意识,到时候人类不小心把一个计算机关机了并摧毁了,会不会犯了杀计算机(or机器人)罪?

作者的一些预测观点已经发生或者正在发生,再过20年,人类之上,会不会有新的物种出现?拭目以待吧?/p>

NO8. 《增长黑客? ? class=? class=? class=? class=
这本书内容还可以,就是文法比较散漫,语法比较随意,对于刚接触互联网的新人(尤其是上了年纪的),不会容易理解。增长黑客的主要工作就是用各种『黑客手段』(超出常人一般的做法,不是指真的黑客)驱动公司的业务增长。主要从运营的角度,从获客、到转化、活跃、留存、老带新等阶段,做与之相匹配的操作,驱动各个阶段的增长?/p>

NO9. 《格鲁夫给经理人的第一课? ? class=? class=? class=? class=? class=
这本书字字珠玑,对刚接触管理工作的人,会很有帮助。不多说了,自己看吧?/p>

NO10. 《你一定爱读的极简欧洲史?? class=? class=? class=? class=
今年流行各种《极简xx》,这本书对于历史经常考试不及格的我还是很有启发,简洁明了。总结起来,整个欧洲的历史和罗马文明分不开,虽然罗马早就亡国了,但他的影响,一直留存到现在,这就是文明的力量?/p>

NO11. 《周鸿祎自述:我的互联网方法论?img src="http://s.w.org/images/core/emoji/12.0.0-1/72x72/2b50.png" alt="? class="wp-smiley" style="height: 1em; max-height: 1em;" />? class=? class=? class=
这本书主要讲解周鸿祎的互联网思维,每个互联网大佬都有自己互联网思维。雷军的互联网思维就是用效率升级改造产业链,产出物美价廉的高性价比产品打击存量市场,把用户留住,然后在用后续的其他手段获利。周鸿祎也差不多,只不过在软件层,而不是硬件层这么做。互联网思维的核心点除了免费(或高性价比)之外,其实是要做到以用户为中心,以产品价值为核心,才能最终留住客户,你才能做后面的事情?/p>

NO12. 《自私的基因? ? class=? class=? class=? class=? class=
这本书看书名容易产生误解,以为基因本身有思考能力,否则他怎么做到『自私』?其实不然,基因就是一种复制子,他的使命是更长久的(复制自己并)存活下去。基因的自私不代表人性的自私。基因创造我们的身体和大脑,但他并不能直接控制我们,而是通过代码片段,对我们造成影响。人类的文明史就是基因和幂母(MEME)的斗争史。幂母也是一种基因,他也是一种复制子,也有『自私』的特性。以后产生的超级人工智能,可能就是幂母的一个后代而已?机器人要变成『人』,一定要突破如何繁衍下一代的关卡,比如纳米机器人很可能就是下一代地球的霸主?/p>

NO13. 《极简宇宙史?? class=? class=? class=? class=
非常Exciting的一本书,一场非常有趣的思想实验。从万有引力到相对论到量子力学再到弦理论,每种很牛逼的理论都有他们的适用范围,接下来科学家都在搞的就是一个大而统一的理论,可以把这些所有的理论都兼并起来,解决他们之间的冲突。这一切只是时间的问题,而这个时间,对浩瀚的宇宙来说,不过是一瞬间的事?/p>

NO14. 《大国大城:当代中国的统一、发展与平衡? ? class=? class=? class=? class=
看完这部书,我为中国感到前途光明。因为我们的城市化是这么的畸形,而这些畸形都是内部的问题造成的,不是别人束缚我们,所以我们只要愿意改革,再上进几个层次都不是问题。从大局的眼光看,当前的既得利益,都一文不值。其实我们生活在城市里,有城市户口,对大多数农民工工来说,我们都是既得利益者。最近北京搞的一些脑残的清理xxx的运动,简直就是逆城市化行为,历史的车轮的滚滚向前的,这些拍脑袋的人阻止不了我们伟大的时代到来?/p>

2017总结

看的书比较杂,这里技术类的不列出来,技术类的书我建议还是看纸质的,图文并茂更容易理解。关键要带着目的去看,然后看的同时一定要多动手,举一反三,才能更快掌握技术类的新知识? 当然不是所有书都要带着功利的目的去看的,比如《人民的名义》这种就是为了娱乐放松下?/p>

读书容易给人一个感觉,就是读的书越多,会越觉得自己无知。但没必要觉得气馁,你get到了,你就比别人进步了?/p>

2018书单

  1. 《长尾理论?br /> 这本书刚开始看,没看完?018年看完?/p>

  2. 《小米生态链战地笔记?br /> 这本书看了几章,都比较接地气,同时我目前也正在做物联网相关的工作,然而小米在4年前就开始布局了,然后现在去他们的米家商城看,哇塞,除了手机,其他都做的很不错,特别他们的只能家居这块,米家app里面居然可以编程,不得不佩服雷军的眼光?/p>

  3. 《创新者的xx三步曲?br /> 周鸿祎教主推荐的,在他的方法论那本书里,今年买的还没看多少,2018看完?/p>

  4. 《TensorFlow 系列?br /> 了解下当前ai都在干啥,希望在超级人工智能这个新物种降临之前,能知道他们是怎么生存的?/p>

]]>
http://xfpz180.cn/blog/741/feed 0
最安全的股票配资平台-万和证券-金八配资网 http://xfpz180.cn/blog/732 http://xfpz180.cn/blog/732#respond Tue, 19 Dec 2017 16:31:53 +0000 http://xfpz180.cn/?p=732 Java性能问题排查经验分享 阅读更多 »

]]>
前言

好久没动笔写博客了,为了不给2017留空白,特写此篇?这篇文章提到的案例、方法、方案有些是在之前的文章中会零散提到过,都是在公司内部分享多次以及迭代多次的结果,当然,敏感数据的地方我会换成一些fake的数据,注重方法论,数据上有问题的地方请包容?/p>

这个话题其实可以涉及到各种各样的场景,我这里仅仅是把我们公司内部经常遇到的一些问题拉出来分享。本文的案例基本上都基于linux环境的java程序进行分析,如果你是windows或者其他的操作系统,可能有些工具需要自己寻找、下载?/p>

首先讲讲排查思路

1. 出现问题之前,是否刚刚做了发布(上线新的代码:功能、修改等?/h3>
  • 是:结合内部的服务器监控系统(zabbix等)的数据,判断是否在发布的时间节点前后发生不一样的现象,如果是,基本可以断定是新代码导致的问题,第一时间回滚代码(如果可以的话,技术方案设计上本来也要考虑失败回滚的问题),先恢复应用的正常访问(服务),再分析新上的代码是否有问题?
  • 否:如果是历史遗留的问题,就需要结合工具来排查(这写就是本文会讲解的重点)

2. 关于日志

  • 日志不是越详细越好,记录关键信息才是真理。如果每次打印日志都把过程数据写上,反而容易引起磁盘io问题、内存频繁ygc问题?
  • 日志要有意义,debug性质的日志一律用 debug级别,线上禁止打?debug级别的日志?
  • 区分性能日志和业务日志:性能日志用于发现性能问题,业务日志用于记录业务流水方便后期追溯?

排查工具

  1. ps | grep 组合命令?方便快速找到进程id(java有自带的jps工具?
  2. vi/tail/head/more/less: 查看线上日志的工具,注意不要用vim打开打日志,往往会给(内存)负担过重的服务器致命一?
  3. awk 文本分析脚本,可以快速分析性能、业务日志,得出结果,不用等大数据平台一系列流程
  4. top:查看进程(和线程)的cpu耗时,内存占用情?
  5. iotop:查看进程和线程的IO消耗情?(需要自行安装)
  6. iftop:查看进程和线程的网络情?(需要自行安装)
  7. lsof:查看文件打开情况(含网络、本地文件、设备等?
  8. JVM系列tools (本文重点)
    • 8.1 jstat:查看进程内存分配和gc情况
    • 8.2 jstack:查看进程的线程?
    • 8.3 jmap:dump java 内存。(不要对在线提供服务的应用做jmap?
    • 8.4 btrace:运行中的代码调?
    • 8.5 jprofile: 外挂的形式,分析具体到方法级别的相应耗时,压测配合jprofile,能直接找到瓶颈
  9. IBM Memory Analyzer Tool, 简称MAT,用于分?jmap 命令dump出来的内存文?
  10. 监控工具
    • 10.1 zabbix:观察系统的历史性能状态(顺便告警?
    • 10.2 ganglia:观察系统的历史性能状?
    • 10.3 vision: 我司内部自研系统,观察业务的性能数据,QPS vs RT
    • 10.4 各式APM工具,比如OneAPM,听云等,通过javaagent的方式实时分析程序的性能问题

一些案?/h2>

案例1. 进程耗CPU咋办

一般两种问题:
– a. 业务代码中有大(或死)循环,消耗大量CPU计算资源
– b. 垃圾回收(GC)频繁,导致gc线程消耗大量CPU (FullGC、YoungGC均会消耗CPU资源?/p>

针对a情况,如何找到消耗CPU的代码段?/h4>
  • ps | grep 组合键找到进程id
  • top -H -p $pid 列出线程详情 ?H命令可以显示线程情况?
  • 找到耗CPU最高的几个线程ID ( 同时按下 shift + T , 按CPU时间(Time)排? ,在-H模式下,pid就是线程id
  • printf %x $tid 把线程ID转化?6进制?记录下来
  • jstack -l $pid ,dump出线程栈 ,最好写到文件里
  • 通过第四步得到的线程ID?6进制,在线程栈里面找到相应的线程栈信?(nid=0x16进制线程ID?

至此,定位到的代码段一般就是耗CPU的代码段了?/p>

通过上述排查,如果耗CPU的线程是VM Thread,说明是进入了b情况

  • 首先,我们必须清楚gc的情况,如果没有开启gc日志,只能通过 jstat命令查看
  • jstat -gc $pid , 观察 YoungGCCount ?FullGCCount 的增?/li>
  • 如果ygc快速增加,说明是新生代内存分配和回收过? (比如每秒增加几十次ygc),此时需要结合观察日志,看某种业务(服务)是否在快速打日志,是的话一般就是此处的频繁工作引起问题?/li>
  • 如果fgc快速增加,说明是老生代的内存一直不够用(晋升失败),此时可以通过jmap 命令dump内存,到本地用mat工具分析

案例2. 进程or线程hang住了怎么?/h3>

一般原?/h4>
  • 死锁(本地锁&分布式锁?
  • 依赖的远程服务hang?amp;没有设置超时时间
  • 线程池耗尽 or 连接池耗尽
  • 死循?
  • 调用网络服务,但网卡带宽被耗尽

解决方法

  1. 排查是否死锁
  2. 设置远程服务(含API、MQ消息、分布式锁等)的超时时间,业务需要兼?
  3. 调高线程池or连接?& 缩短超时时间(业务需要做兼容?

排查死锁的方?/h4>

很简单,通过jstack工具,他会直接告诉你死锁在哪?br /> 1. 找出进程ID
2. jstack -l dump出线程栈
3. 通过 deadlock 关键字找到相关线程信息即?/p>

案例3. 进程周期性卡顿怎么?/h3>

一般原?/h4>
  • 有定时任务,定时任务触发时把系统拖慢
  • 有定时fullgc,可能是定时任务导致的fullgc,也可能是定时触发fullgc。fullgc时会stop the world?

解决方法

  • 如果是定时任务,优化定时任务对内存的使用
  • 如果是定时触发fullgc,而系统不能接受,则配置vm参数禁用fullgc

排查过程

  1. 启动参数中要添加gc日志
  2. 如果没有gc日志,则通过jstat -gc 命令来查看gc情况
  3. 如果OU(old区使用量)远远没有达到OC(old区容量)就触发了fullgc,一般是定时触发,可以通过添加 -XX:+DisableExplicitGC 参数禁用定时触发的fullgc?

案例4. 进程OOM怎么?/h3>

首先,要先知道有哪些OOM,每种OOM都是有什么问题引起的?/p>

OOM种类

  • gc overhead limit exceeded :jvm花大量时间回收少量的内存?
  • java heap space:heap内存不够用,无法继续分配内存,且无法回收足够的内?
    • heap的大小由 -Xms ? -Xmx 决定
    • 一般配置了 -XX:-UseGCOverheadLimit 就不会出现gc overhead limit exceeded 问题?最终会变成 java heap space
  • unable to create new native thread:超过资源限?
    • 进程、线程数超过了系统限制(ulimit?
    • 线程数超过了kernel.pid_max的限?
  • perm gen space?持久代不够用
    • 持久代不够用,调?PermSize 参数
    • 调大也没用?怀疑classloader错误使用?
  • direct buffer memory :堆外内存使用超出限制的大小
    • 如果机器内存足够大,可以调大 -XX:MaxDirectMemorySize 参数
    • 一般是网络通信没有限流,而且用内存做buffer
    • 定时fgc 主动回收堆外内存
  • map failed?FileChannel map的文件超过了限制
    • 调大 vm.max_map_count 系统参数可解
  • Requested array size exceeds VM limit?创建数组大小超过jvm限制
    • 创建Integer.MAX_VALUE – n 以上长度的数组会抛出, n和jvm实现、系统环境有?
  • request ? bytes form ?. Out of swap space
    • 地址空间不够用(一?2bit系统才会碰到),物理内存耗光
    • 强制触发fullgc看有没有好转,有的话可能是DirectByteBuffer误用造成?
    • jmap -histo:live $pid 可以强制触发fullgc?

排查过程

  1. 先把服务摘离线上服务集群
  2. dump服务的内存,由于OOM后java进场可能会无法直接访问,需要使用jmap?F参数强制dump
  3. 将dump出来的文件拉到本地环境,用mat工具分析?

参考链?/h2>
  1. 阿里研究?毕玄 的博客:http://bluedavy.me/
  2. 官方troubleshooting文档:http://dwz.cn/javatsg
  3. OOM shooting: http://plumbr.io/outofmemoryerror
]]> http://xfpz180.cn/blog/732/feed 0 长宏策略-股票资配宝-股指期货知识 http://xfpz180.cn/blog/681 http://xfpz180.cn/blog/681#comments Fri, 11 Sep 2015 04:13:35 +0000 http://xfpz180.cn/?p=681 shallow heap vs retained heap 阅读更多 »

]]>
在java内存分析软件(mat,jhat等)中,有两个概念是 shallow heap ?retained heap (有时候叫shallow size ?retained size)?/p>

shallow heap

比较好理解(好理解不代表好计算),直译就是浅层堆,其实就是这个对象实际占用的堆大小?/p>

retained heap

江西股票期货配资炒股比较难理解,直译过来是保留堆,一般会大于或者等于shallow heap,那么retained heap如何理解呢?

retained heap 的计算方?/h3>

首先,不能按?shallow(浅??deep(深)的层次来理解这个retained heap,其实最简单的理解就是,如果这个对象被删除了(GC回收掉),能节省出多少内存,这个值就是所谓的retained heap。而GC算法中,是否回收一个对象,主要是判断一个对象是否存在引用(还有一些系统级别或特定对象不在此列),至于标记还是引用计数算法,最终都是为了判断是否被引用。简单理解,如果一个对象没有被引用了,就可以回收了?/p>

这里我们先定义一下引用(这里不包含所有“引用”的定义,比如数组会引用他的所有元素,所有对象都会引用他的Class对象等等,这里只是为了简单举例):如果一个类的对象出现在另一个类的成员里,那我们就认为后者引用了前者。比??A?B?其中 B 中有一个成员变量是 A 的对象,那么就说B引用了A。如下代码:

public class A {
     //class define...
}

public class B {
     private A aObj;
     //rest class define
}

下面?-> 来表?code>引用
我们假设有四个对象, 假设他们的shallow heap都是 1K?他们的引用关系如下:
对象关系1
A -> B?A -> C (A同时引用了B和C)
B -> C
C -> D
注意D已经没有引用其他的类了(即使是JDK里面提供的String?Date?Integer等都不行?br /> 很显然, D?retained heap 等于他的 shallow heap = 1K?br /> C 引用?D?如果把C删了,D也会被回收, 所?C 的retaned heap = 2K
B 引用了C?但是把B 删除了之后,C并不会回收,因为还有A在引用C,所以B的retained heap = 1K
江西股票期货配资炒股 A 引用了B和C?把A删除后,BCD都会被回收,所以A的retained heap = 4K

假设?我们再添加一个对象(shallow heap也是1K), 他引用了B,会怎样呢?
对象关系2
D的retained heap 还是 1K
C的retained heap 还是 2K
B的retained heap 还是 1K
A的retained heap 变成 1K, 因为删除A,其他的节点并不会被回收
E的retained heap 也是 1K, 因为删除B,其他的节点也并不会被回?/p>

理解?retained heap,再来理?shallow heap。上面说过, shallow heap比较好理解,但是不代表他好计算。。。因为他的计算跟
1. CPU架构有关
2. 操作系统位数有关
3. 跟JVM参数有关

shallow heap的计算方?/h3>

所以这里就规定,以下的分析和计算是基于32位x86系统?br /> shallow heap 的是有计算公式的?br /> shallow heap = 类定义引用大?/em> + 父类的成员变量所占的空间 + 当前类的成员变量所占的空间 + 结构体对?/em>
其中类定义引用的大小是固定(注意不同架构下这个定义是不一样的),?2位架构下?个字节。对象引用变量也?个字节(也是跟体系架构有关),最后结构体对齐是为了对?8字节的倍数?/p>

举个栗子?/p>

class A {
     int a;
     byte b;
     Integer c = new Integer(1);
}

class B extends A {
     Date d;
     String e;
     List f;
}

如果有对象:

A a = new A();
B b = new B();

下面来计算a和b的shallow heap?br /> a的shallow heap = 8个字节类定义引用 + 4个字节的int成员 + 1个字节的byte成员 + 4个字节的Integer引用成员 + 7个字节的结构体对?= 24Byte
(注意这里不用管 new Integer(1), 这是A类引用了Integer类,这份空间会计算在他的retained heap里面。)

江西股票期货配资炒股b的shallow heap = 8个字节的类定义引?+ 9 个字节的父类成员空间 + 4个字节的Date引用 + 4个字节的String 引用 + 4 个字节的 List 引用 + 3个字节的结构体对?= 32B

一个对象的的shallow heap只需要对齐一次,所以这里不需要在父类对齐一次,然后在子类也再对齐一次?br /> 上面之所以要先定义好是在32bit x86架构下,是因为不同架构确实有不同的定义:
64bit JVM?类定义引用字节是 12Byte
通过设置JVM flag参数和heap的大小,对象引用的大小也可以?字节变成8字节
另外还有一些架构每个对象都有自己的对齐规则的?/p>

参考文?/h3>

http://plumbr.eu/blog/memory-leaks/how-much-memory-what-is-retained-heap
http://plumbr.eu/blog/memory-leaks/how-much-memory-do-i-need-part-2-what-is-shallow-heap
http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fshallowretainedheap.html

]]> http://xfpz180.cn/blog/681/feed 2 瑞安股票配资-海顺证券-境内配资平台 http://xfpz180.cn/blog/669 http://xfpz180.cn/blog/669#respond Thu, 12 Mar 2015 03:37:53 +0000 http://xfpz180.cn/?p=669 《从优秀到卓越》读后感 阅读更多 »

]]>
前言

这本书值得读是因为他不是一本讲成功学的书,虽然大部分数据都是来自那些世界顶级的卓越的公司。成功学的书讲的都是你跟我这样做,做完你就成功了。这本书是讲,你要是不这样做,你就难以达到卓越,也就是你这样做仅仅是一个最基础的东西,不能导致你一定卓越,但却是必不可少的。作者也很会写书,第一章就把一个富有噱头作用的标题甩出来,成功是卓越的杀?/strong>(or绊脚石),你一定会想跟他争辩,然后就会看下去了。优秀确实是卓越的杀手,但其实优秀也是卓越的基础。你要想卓越,首先得优秀,然后不甘于优秀(现状),最后才能卓越。书后面的飞轮理论也说了?strong>卓越不是突然之间导致的,而是之前所有努力的总和导致的?/p>

训练有素?/h3>

这个词出现了好几次,最主要就是自我管理,而且是非常严格的要求。书中提到的那些?级经理人都是非常牛逼的人,自我驱动,目标明确,不计较个人利益,把公司利益放在第一位,知道如何培养下一个第5级经理人。看看国内这些顶级的互联网公司,马化腾,李彦宏,雷军等等都基本上算的上是第五级经理人。大家经常说他们处在风口上,我想说,他们即使没在风口上,也是会飞的鸟,而不是。。猪。雷军在小米创业的前几年,主要精力都是投入在招人上面,寻找合适的的人很重要。如果创始人很牛逼,后来者都很平庸,那么公司也就是初期因为idea不错能拿到一点风投,想做大做强,?个天才是不够的,而是应该大家都是天才(或者说精英)。雷军刚创立小米那年也是中国经济的低迷时期,08年次贷危机之后,人才多,价格便宜,捞到就是赚到,在经济低迷的时候招牛逼的?/strong>,也很重要。当然我不知道小米一开始创立的时候是不是已经想到了现在这个局面,我倾向于相信,他们是先上车,再定目的地?/p>

刺猬理论?/h3>

江西股票期货配资炒股找出自己最擅长的点,在一个点上发力,遇到困难还可以及时收缩战线,等困难过去又能继续前?/strong>,这是何等的信念才能做到?Keep it simple and simpler.

飞轮理论?/h3>

飞轮理论其实不是为了?.01?65次方?7.78,而是一个企业的卓越不是偶然导致的,而是很早以前就开始推动轮子了。就像历史的轮子滚滚向前,一个朝代的灭亡和另一个朝代的兴起不是突然之前的,而是靠日积月累,积少成多而成的?strong>不积跬步,无以至千里,说的就是这个道理?/p>

从这本书我们能学到什么?(来来来,干了这几碗鸡汤!)

1.自我管理人人都会,但对自己严格要?/strong>的人很少?br /> 2.?strong>最?/strong>的人?strong>宁缺毋滥?br /> 3.分享你的思想,不能让自己一个人牛逼,而应?strong>带领其他人通通牛?/strong>?br /> 4.努力努力再努力,对卓越者来说,除了努力其他就是运气(旁观者则不是这么觉得,于是才有了本书);
江西股票期货配资炒股 5.成功(卓越)绝非偶然?br /> 6.卓越?strong>?/strong>比优秀难以达到

]]> http://xfpz180.cn/blog/669/feed 0 股票期货配资网-广州证券-九牛配资官网 http://xfpz180.cn/blog/667 http://xfpz180.cn/blog/667#respond Wed, 11 Mar 2015 12:27:16 +0000 http://xfpz180.cn/?p=667 《大数据时代》读后感 阅读更多 »

]]>
前言

这本书去年(农历年)年底的时候读完了,翻译的还行,关键译者还有自己的观点。之前(2011年)知道译?strong>周涛老师是在杭州一个大数据的分享会议上,冒出来一个新公司叫百分点的公司做推荐算法的,当时不是觉得这个公司牛,而是这个人牛。因为但是他年龄也就二十五六岁吧,已经是电子科技大学的教授了(主任级),这点是很难的。买这本书其实也是关联推荐买的,本来我是买一本大数据决策,然后推荐的列表里面看到了这本,也就顺手买了?/p>

说大数据时代,那么什么是大数据?

1T数据够大吗?1P呢?1Z呢?No No No! 大数据其实跟数据量的大小没有确定性的关系?code>大数?/code>其实是相?code>小数?/code>而言的。什么是小数据?其实小数据跟数据量也无关,根计算方式有关。小数据是基?code>总体数据下面?code>抽样分析,得到精确的结果。抽样分析的准确性是跟数据的随机?/code>相关的,随机性越高,抽样的结果越能准确的反应总体的数据。小数据时代下的抽样统计方式之所以流行是因为那个时代?code>计算能力不够强大。与之相对的,大数据时代下,数据?code>更全?/code>的,计算资源也丰富,足以让我们对数据?code>全盘的分?/code>,从而直接得到总体的结果。这里的样本就是总体。当然大数据也有不足的地方,就是他的精确?/code>不够(但是往往是可?code>容忍这种不精确的?/p>

大数据时代有什么变革?

首先人们?code>思维方式会受到挑战。考虑需要更全面,不再由抽样来反应总体。需要各种各样不同的数据源,但同时也会引入一?code>噪音,要容忍这些噪音。要明白数据反馈的是事件之间?code>相关?/code>,而不?code>因果?/code>。从数据推倒出来某个因果关系基本上都是加上?code>主观意识的干涉的,不够理性。不要刻意通过数据去追求因果关系,因为最终的结论其实都是主观的?/p>

相关性如何理解?

其实就是概率论中?code>条件概率(贝叶斯定理)?比如一个山脚的别墅,里面养了一条狗,根据主人统计,狗叫的时候,刚好遇到有盗贼的情况的概率为 80%,也就是平日里,10天狗叫有8天是因为有盗贼来了。然后突然有一天,又听到了狗叫,这时你会认为有没有盗贼呢?你不知道,你知道说很可能是来盗贼的,概率大约80%。因为狗叫和盗贼之间不存在因果关系,而只是存在相关性。哪一天来了个主人的远房亲戚,狗也是会叫的,但亲戚并不是贼。贝叶斯公式展开讲就比较复杂了,这里不深入?/p>

相关性很重要,忘掉因果性,这点很重要?

商业模式上,大数据也带来了变革?/h3>

比如?code>提供基础数据的大数据公司,像twitter,facebook,微信,微博这种大规模用户下信息流为主的公司。像twitter,他自己虽然也分析数据,但是他还会把数据授权给第三方公司去做分析,然后得到商业价值。还有一种是数据技术公?/code>,比如google,通过大数据不断地训练自己的神经网络,提供各种牛逼的功能。比如google翻译,google翻译的开发者其实没有一个人懂全世界那么多种语言,但是他们可以互转就是用了大数据,把大量的数据信息录入到数据库,然后以英语为中间语言,互相转换。还有一种公司是大数据思维公司,也就是第一个例子中twitter授权给分析的公司,这种公司主要是?code>数据分析,自己不产生源数据?/p>

大数据也带来一些问题和挑战

隐私问题?/h4>

在大数据下面,每个人几乎都是“裸体”的,只要有耐性,你在网络上的信息都可以分析到,甚至可以精确到你的住址,家人,朋友,以及朋友的朋友,家人的朋友?/p>

数据结果滥用?/h4>

比如错把相关性当初因果性,狗叫时你就拿了个武器去把对方放到了,结果一看是亲戚艾玛。另外是大数据往往是反映了群体性的结果,而不是单个人的结果。通过主观意识,把总体的行为反馈到个人行为身上,产生数据保证。比如种族歧视就是最好的例子?/p>

大数据神棍?/h4>

没错,就是通过数据分析,得出一些结果,就依次推导未来的发展。再次声明,数据只能提供相关性,不提供因果性,数据只能说明有点关系,不能推导出什么玩意。最好的预测未来就是去创造未来?如果一切都按数据说了算,福特就不会发明汽车了。苹果手机,You think too beatiful !

本书最重要的一个理念就是:在大数据时代,相关性比因果性更重要,同时不要把相关性错当为因果?/strong>?/p> ]]> http://xfpz180.cn/blog/667/feed 0 股市怎么看-西安配资开户-现货期货 http://xfpz180.cn/blog/659 http://xfpz180.cn/blog/659#comments Sun, 18 Jan 2015 06:35:02 +0000 http://xfpz180.cn/?p=659 让mysql支持emoji表情符号存储 阅读更多 »

]]> mysql的文本(varchar, text),对emoji表情符号不是很好的支持,?.5之前的版本,varchar和text都是不支持存储emoji表情符号的(即使是utf8)的编码模式。原因在于mysql的utf8是规定了每一个utf8字符按照3个字节来存储,而一个emoji(最初来自苹果系统,现在流行于各种移动操作系统)却需?个字节来存储。这就导致了如果强制将emoji存储到varchar,text等字段上的时候,mysql会抛出异常,认为emoji是个“不正确”的文本?/p>
  • ERROR 1366 (HY000): Incorrect string value: ‘\xF0\x9F\x91\xBD\xF0\x9F…’ for column ‘name’ at row 31

所幸,mysql?.5之后的版本,针对四个字节的utf8字符推出了一种新的兼容的编码,叫 utf8mb4。utf8mb4比utf8支持的字符集更广,可以支持utf8以及四个字节的字符集,关于utf8mb4和utf8的区别可以这篇官方文?sup id="fnref-659-official_doc">1?/p>

简而言之就是:“utf8mb4 is a superset of utf8?/code> ,utf8mb4是utf8的超集,utf8是utf8mb4的子集。utf8mb4理论上是兼容utf8. 所以如果你的项目需要支持存储emoji表情,同时mysql的版本是5.5以上的版本,那么就可以把字段的charset改为 utf8mb4就可以完美支持emoji了?/p>

alter table category modify name text charset utf8mb4;

那如果当前mysql版本不支持utf8mb4编码怎么办?

解决方法?/h2>

1. 升级mysql版本?.5.3以上?:)

2. 把需要支持emoji表情存储的字段改?blob的。(这是针对mysql升级有限制的情况?/h3>

江西股票期货配资炒股blob类型一般是用来存储二进制文件的,当时用来存储文本其实也是可以的,只不过存进去之前,把文本变成byte数据就可以了。已java为例,使用String.getBytes(charset)方法,可以把字符串转化成二进制,然后存储到数据库中。如果你有很多字段都要这么搞的话,估计都得疯了。怎么办?用orm框架~

江西股票期货配资炒股已ibatis为例,如果你的对象字段是String文本,存储的字段确实blob,其实是没有关系的,不需要写特殊的代码,直接支持写入。但是读出来的时候就需要做转换,否则出来的是乱码。所以这里需要借助ibatis的typehandler和resultMap来解决这个问题。ORM框架的好处就是你不用一直重复劳动,可以在各种地方留着钩子(hook),随时让你在需要的时候可以插点东西到关键的地方上去。好了,废话不多说,看看这个typeHandler怎么实现?这里是ibatis2.3.*的版本,如果是myBatis,可能报名和接口参数不太一样,但实现方式是一样的)

public class BlobStringTypeHandler extends BaseTypeHandler {

    //charset
    private static final String DEFAULT_CHARSET = "utf-8";

    @Override
    public void setParameter(PreparedStatement ps, int i, Object parameter, String jdbcType) throws SQLException {
        ByteArrayInputStream bis;
        String param = (String) parameter;
        try {
            //###把String转化成byte?            bis = new ByteArrayInputStream(param.getBytes(DEFAULT_CHARSET));
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Blob Encoding Error!");
        }
        ps.setBinaryStream(i, bis, param.length());
    }

    @Override
    public Object getResult(ResultSet rs, String columnName) throws SQLException {
        Blob blob = rs.getBlob(columnName);
        byte[] returnValue = null;
        if (null != blob) {
            returnValue = blob.getBytes(1, (int) blob.length());
        }
        try {
            //###把byte转化成string
            return new String(returnValue, DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Blob Encoding Error!");
        }
    }

    @Override
    public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
        Blob blob = rs.getBlob(columnIndex);
        byte[] returnValue = null;
        if (null != blob) {
            returnValue = blob.getBytes(1, (int) blob.length());
        }
        try {
            //###把byte转化成string
            return new String(returnValue, DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Blob Encoding Error!");
        }
    }

    @Override
    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
        Blob blob = cs.getBlob(columnIndex);
        byte[] returnValue = null;
        if (null != blob) {
            returnValue = blob.getBytes(1, (int) blob.length());
        }
        try {
            return new String(returnValue, DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Blob Encoding Error!");
        }
    }

    @Override
    public Object valueOf(String s) {
        try{
            return s.getBytes(DEFAULT_CHARSET);
        }catch (Exception e){
            return null;
        }
    }
}

重点看几个getResult方法,就是从ResultSet中拿到blob字段数据(byte[]),然后把byte数组转化成string就OK了?br /> 怎么使用?br /> 在sqlMap文件定义resultmap?对需要转换的字段指定这个typeHandler就可以了?/p>

<resultMap id=“EntityMap" class=“your.pack.Entity">
     <result property="name" column="name" jdbcType="BLOB" javaType="java.lang.String" typeHandler=“your.BlobStringTypeHandler"></result>
</resultMap>

注意select的statement语句返回使用resultMap指定这个 resultMap

<select id=“EntityDAO.getByXXX" parameterClass="java.util.Map" resultMap="EntityMap">
          select
            name
          from
          your_table
          where
          ...
        limit 1
 </select>

OK, mysql支持emoji了:?/p>


  1. http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html 
]]> http://xfpz180.cn/blog/659/feed 1 君安证券-重组配资开户-期货行情软件 http://xfpz180.cn/blog/643 http://xfpz180.cn/blog/643#comments Sat, 20 Dec 2014 07:36:50 +0000 http://xfpz180.cn/?p=643 Mac使用jdk7启动Intellij Idea 阅读更多 »

]]>
我们当前研发的产品,不论是线上还是开发环境,基本上都已经用上了jdk1.7,而在macos 13.* 版本中,如果本地环境已经安装?.7的jdk,但是没?.6的jdk,idea启动的时候会报错,说需要旧的java se6才能支持。如题图所示?/h2>

首先怀疑是不是环境变量没设置好:于是增加了JAVA_HOME环境变量之后,问题依旧:
java home
jdk明明是向前兼容的?.7下跑1.6能支持的软件一?1)情况下是没问题的,为什么会出现这样的提示呢?原因肯定是在于idea哪里配置指定了只能使?.6版本的jre才能运行。所以解决方法应该是从idea的配置文件入手?/p>

进入idea的安装目录,有个Contents目录,里面有个Info.plist配置文件?br /> Info.plist
打开Info.plist,检索?.6”字符串,果不其然,还真找到了:
modify
配置项是JVMVersion,配置的值是1.6?把值改?.7之后启动idea?br /> idea home

perfect,完美运行。看下这个Info.plist,其实还有其他的配置项在这里可以修改,在JVMOptions下面,除了有JVMVersion之外,还有VMOptions, ClassPath等配置项,可以修改。当然一般情况下,这些选项是够用的,不需要手工去修改他?/p>

扩展阅读?br /> 1: http://stackoverflow.com/questions/13575224/comparison-method-violates-its-general-contract-timsort-and-gridlayout
2: http://stackoverflow.com/questions/6626437/why-does-my-compare-method-throw-exception-comparison-method-violates-its-gen


  1. 为什么说1.6支持的软件“一般”能跑在1.7下面而不是“一定”呢?因为jdk7把一些底层的接口默认实现改了,但是会带来问题。比如Arrays.sort()方法,在1.6之前,这个方法模式使用的排序方式是mergeSort,而到?.7,默认的实现变成了TimSort。在1.6下的正常排序?.7可能会出现不正常或者说排序结果跟想象中的不一样。TimSort对每次比较的结果要求跟严格,?.6下可以正常排序的结果?.7可能会抛异常?#160;
]]>
http://xfpz180.cn/blog/643/feed 2
炒股配资赚钱-金融投资-股易融配资 http://xfpz180.cn/blog/594 http://xfpz180.cn/blog/594#comments Thu, 15 May 2014 13:34:08 +0000 http://xfpz180.cn/?p=594 如何读懂小票据热敏打印机编程指南 阅读更多 »

]]>
背景

买了个网络打印机, 随机光盘附带了一?《XX系列中文编程手册.pdf?/strong>,打开一? 艾玛, 这都是神马啊!
sample
艾玛,这都是什么命令啊?windows,明显不是,难不成他打印机里面装了个系统?哦对了,怎么他妈才能给这个打印机发送命令啊??


数据传输方式

有上面的疑问很正常,人家是堂堂网络打印机,当然是通过网络来发送命令啦,那怎么连呢?恩,他没告诉你,但这个应该是通用的标准,果不其然,该打印机(容大RP58-L)出厂设置了该ip地址?code>192.168.1.87,打印机端口?code>9100。既然IP地址和端口号都齐全了, 明显就是一个套接字(Socket)?所?通过socket来发送命令没跑了.


命令解读

command
这些命令怎么回事? 怎么奇葩的用 ESC HT GS什么的开头的?其实没那么复? 这些ESC, HT, GS, FS什么的不是一个字符串, 他们都是ASCII码表里面排名靠前的控制字? 通过套接字你传送的数据是流, 而流的本质上是一个一个的字节, 所以这里的命令? 一个符号代表一个字? 而字节的值在每条命令的详解里面有参考?

命令解读例子

command sample
比如这条命令, 他的用途是用来 “选择打印模式” ?br /> 其中, ?strong>[格式]
这一? 他的 ESC ?! 都是ASCII码对应的? 下面列出?6进制码和10进制码提供对?
然后主要变化的值是n, n是一个数? 0~255的区间内变化,下面的表格列举的时候n的值是什么的时候可以做什? 他这里有8个位(刚好一个字?可以设置, 每个位的1/0代表开关的开启和关闭, 比如要设置字体加? 那么n的第3位应该是1, 也就?2^3 = 8, 十六进制?code>08, 所以整个命令下来就??6进制表示)
0x1B,0x21,0x08


如何执行命令

还是上面的例? 我们要给打印机设置接下来打印字体加粗, 那么要把 0x1B,0x21,0x08江西股票期货配资炒股这三个字节发送给打印? 从第二步我们已经知道, 打印机通过socket来提供服? 我们可以直接用socket来发送指?(java代码, 其他语言类似, 不同网络打印机其提供打印服务的套接字可能不同)

Socket client = new Socket("192.168.1.87", 9100);
OutputStream output = client.getOutputStream();
byte[] command = new byte[]{0x1B, 0x21, 0x08};
output.write(command);
output.flush();
client.close();

如何打印文字

通过上面的例子可以知? 我们给打印机发送命令只有通过socket的流来发送指? 所以只能把字符串转换为字节? 再传送给打印?

Socket client = new Socket("192.168.1.87", 9100);
OutputStream output = client.getOutputStream();
byte[] chars = "strings".getBytes();
output.write(chars);
output.flush();
client.close();

当然, 这里不同的打印机可能会有不同的字? 比如中文, 你可能在转换为字节流的时候需要设置不同的编码.


最?/h3>

江西股票期货配资炒股上面这些命令的格式在小票据热敏打印机中一般是通用? 不同的是提供打印服务的方? 有的通过网络来提供套接字服务, 有些通过COM串口来提供服? 对于不同的服务最都可以最终转化为流来处理, 所以本质上都是差不多的

]]> http://xfpz180.cn/blog/594/feed 3