0%

主要分为7个阶段:

入门知识Java基础Scala基础Hadoop技术模块Hadoop项目实战Spark技术模块大数据项目实战

阶段一:入门知识

学习入门知识这一部分主要针对的是新手,在学习之前需要先掌握基本的数据库知识。 MySQL是一个DBMS(数据库管理系统),是最流行的关系型数据库管理系统(关系数据库, 是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据)。 MongoDB是IT行业非常流行的一种非关系型数据库(NoSQL), 其灵活的数据存储方式备受当前IT从业人员的青睐。 而Redis是一个开源、支持网络、基于内存、键值对存储数据库。两者都非常有必要了解。

  1. Linux基础入门
  2. Vim编辑器
  3. Git实战教程
  4. MySQL基础课程
  5. MongoDB基础教程
  6. Redis基础教程
Read more »

互联网发展很快,以前程序员一个人能干的活现在慢慢的被细分成多人协作, 常见的职位有UI、UE、产品、前端、测试、后端、DBA,PE。 但是没有哪个职位是专门负责写文档的,所有文档都是各个岗位的人兼职在做,毕竟大家都识字写两篇wiki不难。 程序员可能会写接口文档,PM可能会写产品文档,UE可能会写交互文档,但并不是每个人都能写好文档。

写文档这件事很重要,也是一项很有前途的技能。但是为什么没有专业的人去做这样一件专业的事情呢? 我猜测是大家都不重视,好比我是程序员里文档写的最好的和我是程序员里代码写的最快的哪个更有份量?

怎样的技术文档才算好文档呢?

  1. 结构清晰

    所谓结构清晰就是用户能马上找到自己要查找的知识点在哪,分类清晰。 有些文档爱用模棱两个的词,比如1. 常见问题2. 热点问题3. 高频问题

Read more »

下面阐述了一些导致重新设计的一般原因,以及解决这些问题所用到的设计模式:

  • 通过显示地指定一个类来创建对象

    在创建对象时指定类名将使你受特定实现的约束而不是特定接口的约束。 这会使未来的变化更复杂。要避免这种情况,应该间接地创建对象。

    设计模式:Abstract FactoryFactory MethodPrototype

  • 对特殊操作的依赖

    当你为请求指定一个特殊的操作时,完成该请求的方式就固定下来了。 为避免把请求代码写死,你将可以在编译时刻或运行时刻很方便地改变响应请求的方法。

    设计模式:Chain of ResposibilityCommand

  • 对硬件和软件平台的依赖

    外部的操作系统接口和应用编程接口(API)在不同的软硬件平台上是不同的。 依赖于特定平台的软件将很难移植到其他平台上,甚至都很难跟上本地平台的更新。 所以设计系统时限制其平台相关性就很重要了。

    设计模式:Abstract FactoryBridge

Read more »

  1. 面向对象的特征有哪些方面?
  2. 访问修饰符publicprivateprotected以及不写(默认)时的区别?
  3. String是最基本的数据类型吗?
  4. float f=3.4;是否正确?
  5. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
  6. Java有没有goto
  7. intInteger有什么区别?
  8. &&&的区别?
  9. 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
  10. Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
  11. switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
  12. 用最有效率的方法计算2乘以8?
  13. 数组有没有length()方法?String有没有length()方法?
  14. 在Java中,如何跳出当前的多重嵌套循环?
  15. 构造器(constructor)是否可被重写(override)?
  16. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
  17. 是否可以继承String类?
  18. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
  19. StringStringBuilderStringBuffer的区别?
  20. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
    Read more »

论语中有这样一句著名的评价:“以其好学之心,假之以年,则不日而化矣”。 其意思就是说,倘若人能够有一颗好学的心,那么几年以后, 这个人不可同日而语,必将取得大的成就。

“性相近,习相远也”。每一个人生下来是没有什么区别的,而恰恰是后天学习让他们各有所长, 从而走上了不同的岗位,走上了不同的领域。学习之重,是孔圣人一直所强调的。 学习是一个人由无知走上智慧的唯一之路,要想成大事业,必须具备相关的知识, 否则就是白日做梦。孔子说“学而时习之,不亦乐乎?十室之邑,必有忠信如丘者焉, 不如丘之好学也”。可见,学习的重要性远远大于了天资等先天条件,勤能补拙, 倘若能够早点认识到学习的重要性,那么你就比别人早到终点一步。

好学首先表现为勤奋,懒惰的人天天口头上吵着要学习,但是却懒于付出行动, 丝毫收获不到成果。勤奋的学习理念,端正的学习态度是好学之心不可缺少的两大元素。

勤奋的人才有可能成功。当有人问鲁迅先生为什么能在文学上取得如此大的成就时, 鲁迅先生说:“我没有什么天分,我不过是把别人喝咖啡的时间用来读书、写字罢了”。 这就是成功的秘籍。 勤奋是大多数平庸的人懒于去做的事情,他们可以找到各种理由来安慰自己, 把自己的好学之心扼杀在摇篮中:今天周末,怎么能学习呢,这么好的天气应该去公园中打牌; 算了,今天太累了,看书的计划取消吧,改日再看; 这书有什么好看的,看了以后也会忘,不如不看,出去玩会…… 长期以往,你便失去了学习的习惯,好学对于你而言就成了神话。

无论对于个人和集体,学习都是不可少的一个环节。没有好学之心,个人不能进步; 没有好学的氛围,集体的发展也停滞不前。

Read more »

对于每一个服务而言,都应有一个清晰的服务说明,描述当前服务的信息,同时帮助团队更快地理解并快速上手。 譬如,在笔者的微服务实践过程中,对于每一个代码库,其服务说明都包括如下几个部分。

服务介绍

  • 服务提供什么功能,譬如产品服务主要提供产品数据的获取或者存储。
  • 谁是服务的消费者。譬如产品服务的消费者为电商的前端网站系统或者CRM系统。

服务维护者

  • 挑选1~2个团队的成员,作为服务的负责人,登记其姓名、电子邮件、电话等联系方式,以便其他团队遇到问题能及时找到服务的负责人。

服务可用期

  • 服务可用周期,如7×24小时,或周一~周五(7:00~19:00)等。
  • 可用率,可用率是指服务可以正常访问的时间占总时间的百分比,如99.9%或者99%。 如果服务一天内都可以访问,则服务当天的可用率为100%。 如果服务有3分钟访问中断,而一天共有1440分钟,那么服务的可用率为: ((1440 - 3) / 1440) * 100%,也就是99.79%。
  • 响应时间,指服务返回数据的可接受响应时间。譬如为0.5~1秒。
Read more »

先来看一下自主账号体系与第三方账号登录体系的利弊(注:文中的“第三方”指微博、QQ、人人等平台):

  • 对用户

    对用户而言,第三方账号登录带来最大的好处就是方便。 一方面可以省去一个注册流程,另一方面也不用费心去记各种账号密码,可以用微博等账号一号走遍天下。 另外通过微博、QQ等平台可以更容易地对好友进行分享并与好友实现互动。 这些好处让许多比较“懒”的用户会更倾向于用第三方账号体系登录。

    而第三方账号登录带来的一个巨大问题就是隐私安全问题。 虽然现在第三方账号登录普遍使用OAuth技术,可以让你无需将微博等第三方平台的用户名和密码提供给应用, 在一定程度上保证了用户名与密码的安全。 但通过授权该应用却可以访问用户的很多资源,比如评论、好友、生日等信息, 而且许多在授权时都是默认选项,用户非常容易因此就泄露了自己的信息。 许多应用在授权时还会默认在微博等第三方平台同步状态,这等于将你用了什么应用, 在应用里做了什么都公诸于众,让用户感觉毫无隐私可言(比如用了某款婚恋应用你却不想让人知道)。 所以对个人信息敏感的用户可能就不会选择用第三方账号登陆体系。

  • 对开发者

    对开发者而言,第三方账号登陆的好处主要是有三点,一点是提升了用户的注册转化率, 降低了进入的门槛。另一点就是可以利用微博、人人等平台的资源,提高自己的知名度。 还有就是可以省去自主登陆体系的开发工作。提升用户注册转化率是因为给了用户更方便的路径, 减少了因嫌注册麻烦而流失的用户;连接了微博等第三方平台, 可以通过信息在该平台的同步提升自己产品的曝光率,同时可以通过授权获得用户的粉丝、好友,并进行针对性的营销。

    而对开发者不好的地方就是如果没有较多的授权,无法掌握用户的全部信息。 从某种角度而言用户还是在微博、人人等平台下,自己没有累计下用户的沉淀, 虽说开放是现在的主旋律,但总还是受制于各大平台,万一哪天开放的策略有变或平台以用户相要挟,开发者也没有什么太好的反击办法。

Read more »

本方法采用UDP协议实现,先生成一个UDP包,将自己的ip地址放到UDP的协议头中,然后从UDP包中获取ip地址。

这个方法并不会发送数据,但是会申请一个UDP端口,经常调用会比较耗时。

1
2
3
4
5
6
7
8
9
10
import socket

def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

GIT_VERSION=2.19.1

yum groupinstall -y "Development Tools"
yum install -y libcurl-devel zlib-devel

curl -O https://mirrors.edge.kernel.org/pub/software/scm/git/git-$GIT_VERSION.tar.gz
tar xvf git-$GIT_VERSION.tar.gz
cd git-$GIT_VERSION
./configure && make && make install

执行下面命令即可:

1
sudo sysctl -w net.inet.ip.forwarding=1

这种做法将在机器下次重启后失效,如果想要永久保存,编辑文件/etc/sysctl.conf,配置下面变量:

1
net.inet.ip.forwarding=1