全栈工程师

让我来发挥一下剪报君的特长,下面是百度百科对[全栈工程师]的说明:

全栈工程师,也叫全端工程师,英文Full Stack developer,是指掌握多种技能,并能利用多种技能独立完成产品的人。

上面的定义,基本上已经比较直白了,我们再举两个例子就更明白了。

假如你是一个Web开发者,如果你既能做前端(需要熟悉HTML、CSS、JavaScript、H5以及Bootstrap、EasyUI等各种前端框架),又能做后端(需要熟悉Java或ASP.net或php或Node.js或Go,选项太多就不一一列举了),可以独自一个人完成一个类似电子商务网站的产品的开发,那你就算是全栈工程师了。

假如你是一个App开发者,既能开发Android应用(需要熟悉Java和Android框架),又能开发iOS应用(需要熟悉Objective-C或Swift以及Cocoa for iOS),又可以开发应用需要的后台(需要熟悉Node.js或Java或Go或……),总之你可以独自一个人开发出一个覆盖Android和iOS的且有业务后台的App,那你也就算是全栈工程师了。

嗯,现在估计我们真的明白[全栈工程师]是什么鬼了。那让我们来看看,假如你想成为全栈工程师,都该了解些什么……比如怎么成为全栈工程师,比如全栈的好与坏,比如选择哪条技术栈来贯通……

全栈ABC

关于全栈工程师,有一些周边是你必须了解的。

对自己产品的渴望

注意,我放在第一位的,不是对技术的渴望,而是,[对自己产品的渴望]。就像一个男人,渴望要一个自己的孩子,99%会选择走“谈对象、结婚、做爱、生娃、养娃”这样一条路。作为一个工程师,如果你对产品的渴望就像那些思子若狂见了人家孩子就想抱走的男人或女人,那你就可能会愿意成为全栈工程师。

一个真正的全栈工程师,会从生活中发现问题,洞察需求,设计解决方案并迫不及待的实现产品。而为了实现产品,他愿意去学习任何领域的知识和技能。注意,他们学习某个领域的知识和技能,并不是为了成为那个领域的专家,而是为了完成自己的目标。他们视野开阔心存高远,不会拘泥于技术,假如挥一挥手,就有产品、设计、开发蜂拥而至为他们开发想要的产品,那他们丝毫也不介意扔掉所有的技术。换句话说,只有在一个人既对产品有迫切的渴望又没人帮他实现时,他才会走上全栈之路。所以,全栈,只是实现目标过程中的副产品,目标,才是首要的。

时势造全栈

前面我们说了,当一个人渴望自己的产品又没人帮他实现时,他如果不能放下灼心的渴望,就可能走上全栈之路。这其实是形势逼迫。那类似的还有另外一种情况,也可以逼着一个人成为全栈工程师。那就是:[加入一个缺人的创业型公司]。

大公司人员充沛,一个萝卜一个坑,个个都是螺丝钉,让你一个人搞定所有事情的概率很小。而小公司、创业型公司则不同,他们往往是人员极度匮乏,一个人得顶几个人用。你搞前端的,后端没人你也得顶上。你搞Android开发的,iOS没人你也得顶上,后台没人说不得也得顶上。就这么着,你很快就全栈了。所以,有一种全栈工程师,是被别人养成的。

思维方式和学习能力

有的人,拿刀逼着也成不了全栈工程师。有的人,把他扔到没电没网络的荒漠,他也可以走上全栈之路。有的人……

这其间的差别,就是思维方式和学习能力。

从思维上讲,要想全栈,你就不能给自己设限。把自己定位在前端工程师或iOS工程师上,任尔东西南北风,咬定青山不放松。这样是不行的。应该心随好猫意纵天高或者鹤舞白沙我心飞翔,总之因时而变、因势而变,需要用什么就学什么,服务器没人搞那我来搞,Android App没人写那我来写……这样打破了自我设限,就具备了成为全栈工程师的基础。

除了这种自我设限的思维模式需要破除,还有一种定势要破,那就是精通每一项技术。对于热爱技术的人来讲,搞精每一项技术是很强的诱惑啊,简直比门口走过的妙龄女郎的吸引力还大。这种思想要破除,因为把门门技术都精通必然会耗时很长,影响你实现自己的产品,所以,只要你学到的那部分能够顺利帮你实现目标,那就可以挥一挥衣袖,继续前行了。

一旦思维上破除了定势,具备了成为全栈工程师的基础,如果你有很强的自我学习能力,那就真的可以顺利走上全栈之路了。而假如你学习能力稍差,面对新技术总是寻寻觅觅寻不到入门的路,那恐怕也把自己逼不成全栈,或者得逼到白头。

全栈的好与坏

全栈工程师的好处就是涉猎技术很广,能够很快运用他所了解的技术开发出产品原型。所以,很多全栈工程师后来走上了创业之路,成了创业者;或者进了创业公司,成了技术合伙人。他们视野开阔,思维活跃,对技术和产品都很敏感,是创业期不可或缺的核心。

然而,正因为全栈工程师的技术是横向发展的,广博有余而精深不足,所以你提到什么,他都能侃上半天,但你要问一些基础的知识点,他可能答不上来。假如全栈工程师不去创业或不加入创业型公司,而是应聘某一个技术方向的岗位,那在面试时就会比较吃亏,因为他用到的大部分技术,细问起来,别人可能都会觉得有了解但不深入。所以,这可能会影响他的求职。不过,如果先一专再多能,然后有意识的选择目标职业,就可以避免这种情况。

选择哪条技术栈

额,其实,对于全栈工程师来讲,往往是没得选择的。比如你做App,你要全栈,你基本上就很少选择余地,Java、Objective-C都是必须的。所以,很多时候是产品和形势选择你成为全栈,是做着做着成了全栈。而不是为了全栈而全栈,假如是为了全栈而全栈,那你是可以选的哦。比如选择MEAN(MongoDB+Express+AngularJS+Node.js),比如J2SE + SSH + Android + Objective-C + Cocoa……

假如你的目标就是成为全栈工程师,你会发现,哇哦,好多东西要学嗳,吓死人啦。那假如你要做一个产品,比如因为你酷爱炒股,你要做一个简单的股票App:跟踪自选股行情,支持自定义提醒,界面要清爽干净,平台呢要支持Android、iOS和Web。那你在做这样产品的过程中,就会被逼成全栈而不自觉。因为,做你喜欢的事儿,是不会觉得累的。

 


最后,娱乐一下,送给全栈er一个来自Twitter的段子:

刚来这家公司面试的时候,老板语重心长的对我说:“虽然工资不高, 但是你可以在这里获得快速的成长,这对做IT的人来说是最重要的。”

现在,两年过去了,老板没有骗我,
我看起来已经像是60岁的人了。

  ——From. Scswga(https://twitter.com/Scswga/status/548684273717215232)

 

大家好,我们是微软大中华区安全支持团队。

 

微软于北京时间2015128日发布了12个新的安全公告,其中8个为严重等级,4个为重要等级,修复了Microsoft WindowsMicrosoft OfficeMicrosoft .NET FrameworkMicrosoft LyncMicrosoft SilverlightInternet ExplorerMicrosoft Edge软件中的漏洞。其中MS15-124中所修复的漏洞CVE-2015-6164 MS15-135中所修复的漏洞CVE-2015-6175已经公开披露,MS15-131中所修复的漏洞CVE-2015-6124MS15-135中所修复的漏洞CVE-2015-6175已被利用。

 

与此同时,重新发布了两个安全公告:

安全公告2755801 | Internet Explorer  Microsoft Edge 中的 Adobe Flash Player 中的漏洞更新

Microsoft 针对 Windows 8Windows Server 2012  Windows RT 上的 Internet Explorer 10 以及 Windows 8.1Windows Server 2012 R2Windows RT 8.1  Windows 10  Windows 10  Microsoft Edge 上的Internet Explorer 11 发布了一个更新 (3119147)。此更新解决了 Adobe 安全公告 APSB15-32 中所描述的漏洞。

安全公告3057154 | 强化使用 DES 加密的更新

公告经过更新,以包括有关在 Windows 7Windows Server 2008 R2 及更高版本的操作系统中默认禁用 DES 的详细信息。 此更新允许用户在客户端和服务器之间使用 DES,以解决出于应用程序兼容性考虑仍需要启用 DES的情况。

 

新发布了一个安全公告:

安全公告3123040 | 无意泄露的数字证书可导致欺骗

Microsoft 注意到无意泄露私钥的 *.xboxlive.com  SSL/TLS 数字证书。 此证书可能会被用来尝试执行中间人攻击。 无法用于颁发其他证书、模拟其他域或进行代码签名。 此问题影响 Microsoft Windows 的所有受支持的版本。 Microsoft 当前尚未发现与此问题相关的攻击。为帮助防止客户可能冒用 SSL/TLS 数字证书,此证书已被视为无效,而且 Microsoft 将会对 Microsoft Windows 的所有受支持版本更新证书信任列表 (CTL),从中删除对此证书的信任。

 

补丁列表如下:

公告 ID

公告标题

最高严重等级
和漏洞影响

重新启动要求

受影响的软件

MS15-124

Internet Explorer累积安全更新(3104517)

严重 
远程执行代码

需要重启

Microsoft Windows,
Internet Explorer

MS15-125

Microsoft Edge累积安全更新 (3104517)

严重 
远程执行代码

需要重启

Microsoft Windows,
Microsoft Edge

MS15-126

用于解决远程执行代码的 JScript VBScript 累积安全更新 (3116178)

严重 
远程执行代码

可能需要重启

Microsoft Windows

MS15-127

用于解决远程执行代码的 Microsoft Windows DNS 安全更新 (3100465)

严重 
远程执行代码

需要重启

Microsoft Windows

MS15-128

用于解决远程执行代码的 Microsoft 图形组件安全更新(3104503)

严重 
远程执行代码

需要重启

Microsoft WindowsMicrosoft .NET FrameworkMicrosoft OfficeSkype for BusinessMicrosoft Lync Silverlight

MS15-129

用于解决远程执行代码的 Silverlight 安全更新 (3106614)

严重 
远程执行代码

无需重启

Microsoft Silverlight

MS15-130

用于解决远程执行代码的 Microsoft Uniscribe 安全更新(3108670)

严重 
远程执行代码

需要重启

Microsoft Windows

MS15-131

用于解决远程执行代码的 Microsoft Office 安全更新(3116111)

严重
远程执行代码

可能需要重启

Microsoft Office

MS15-132

用于解决远程执行代码的 Microsoft Windows 安全更新(3116162)

重要 
远程执行代码

可能需要重启

Microsoft Windows

MS15-133

用于解决特权提升的Windows PGM 安全更新 (3116130)

重要 
特权提升

需要重启

Microsoft Windows

MS15-134

用于解决远程执行代码的 Windows Media Center 安全更新(3108669)

重要 
远程执行代码

可能需要重启

Microsoft Windows

MS15-135

用于解决特权提升的Windows 内核模式驱动程序安全更新(3119075)

重要 
特权提升

需要重启

Microsoft Windows

 

详细信息请参考201512月安全公告摘要:

https://technet.microsoft.com/zh-cn/library/security/ms15-dec

#!/bin/bash
#start on 20151209
#auto_check.sh
#liming
#aim to do db check automatically

#usage:

su - oracle -c 'sqlplus -s / as sysdba'<< EOF   >>/u01/app/oracle/script_test_result/auto_check.log 2>1
set echo on
set feedback on
spool /home/oracle/script_test_result/auto_check.log
select * from lm.lm_t1;
spool off
exit
EOF

生成的spool文件auto_check.log里面,没有我执行的语句。这个怎么搞呀?
[[email protected] script_test_result]# more auto_check.log 


no rows selected

由于对一些命令的不熟悉,导致了我在这个问题上纠结了很久。后来查了许多资料,发现,其实不是set echo on 的问题,而是连接语句的问题。

sqlplus -s / as sysdba

中的-s,查了一下命令,我懂了。。

    -S             Sets silent mode which suppresses the display of
                   the SQL*Plus banner, prompts, and echoing of
                   commands.

果断将-s去掉,然后就恢复了。

[[email protected] script_test_result]$ cat auto_check.log 
SQL> select * from dual;
X

1 row selected.

SQL> spool off

安全似乎落后于Docker阵营在其他方面的发展步伐。虽然越来越多的企业在数据中心使用Docker,但管理员们用来保护容器的技术却完全是慢慢站稳脚跟。在许多情况下,正是当初让Docker大受欢迎的功能特性恰恰也暴露了安全漏洞。

Docker网站称赞其容器是即刻奏效的解决方案

什么是没有隔离的内核?

Docker依赖Linux内核的功能:建立相互隔离的环境(应用程序在里面运行)。这些容器很精简,因为它们共享同一内核,却在不同的运行时环境中执行,这归功于控制组cgroup和命名空间,它们定义了容器可以使用哪些资源。与此同时,容器本身只能看到某些进程和网络功能。

虽然攻击者难以从一个被劫持的虚拟机与主机的内核进行交互,但容器隔离并不提供同样的防御。除了/sys和/proc外,攻击者还照样可以进入内核的关键子系统,比如SELinux和控制组,这意味着攻击者有可能避开主机的安全功能特性。与此同时,容器使用与主机系统同样的用户命名空间。换句话说,如果进程以根权限在容器中运行,它与内核或挂载的文件系统交互时,保留这些权限。因而,管理员还是别以根权限在容器中运行软件为妙;实际上,很少需要这样。

风险:Docker的守护进程

然而,Docker守护进程需要根权限。它管理主机上的容器,需要与提供隔离环境的内核进行对话。与守护进程进行交互的用户因而被授予了访问系统的权限。如果主机托管服务提供商通过Web界面将容器作为一个自助服务选项来提供,这种情形会来得尤其严重。

虽然使用docker群组是个办法,但不太可能改善安全,因为群组成员可以构建容器;而在容器中,首先可以运行根外壳,其次可以挂载主机的根文件系统。这里的唯一办法就是,严格监管对Docker服务的访问,避免不需要的权限升级。

此外,Docker的守护进程可以通过HTTP(S),借助REST API进行联系。如果你使用这项功能,就需要限制只由可信赖网络才可以访问API,或者通过SSL客户端证书或之类的机制来限制访问。

对策

新版本的Docker随带减小上述攻击场景带来的影响的功能特性。Docker以只读方式挂载/sys文件系统和/proc中的重要文件。容器无法写入到它们,因而防止容器中的权限进程操纵主机系统。

内核将根权限细分成了几项功能,然后将这些功能逐个分配给了进程。默认情况下,Docker阻止重要功能,防止容器中的权限进程为非作歹。这些功能包括网络配置、装入内核模块的功能或者访问音频子系统。如果某个特殊的应用程序需要被阻止的功能,Docker允许这些功能供某个容器使用。

SELinux局限性

SELinux是一种安全框架,它给每个文件和每个进程分配了多部分标签multipart label。策略定义了哪个进程标签可以访问哪个文件标签。Docker支持两个变种:类型强制type enforcement和多类别安全(MCS)。

类型强制限制了容器对主机文件系统的访问。所有容器进程都以同一种类型来运行,这样就可以访问容器中的文件和许多主机系统文件,但是又可以防止访问主机上的大多数文件夹(即/var、/root和/home)。

如果只使用类型强制,容器就能够轻松访问其他容器中的数据。归功于MCS,容器启动时,SELinux为容器分配了随机的MCS标签;Docker守护进程用这个标签标记容器中的所有文件,而内核可防止使用不同MCS标签的进程访问容器中的文件。

在许多企业,SELinux已被认为是一项不需要的功能特性,也是管理员们喜欢禁用的一项特性。然而,Docker容器的安全依赖安全虚拟化sVirt之类的功能特性。在几乎没有其他应用程序帮助的情况下,单单sVirt就足以防止来自其他容器的用户读取你的文件。

未来

就未来而言,Docker开发人员在计划增强容器的安全性和隔离性。三项功能特性会助一臂之力,包括用户命名空间、Seccomp,以及基于角色的访问控制(RBAC),加强对Docker守护进程的访问。

用户命名空间获得了优先权。Docker将来自容器的用户ID与其他主机的ID对应起来。其想法是大大限制攻击属于根目录的文件的能力。

由于所有容器都与同一个内核对话,内核功能方面的一个错误对主机和容器之间的边界以及对容器本身之间的边界来说都是致命的。来自谷歌的Seccomp可防止进程对特定系统调用的访问。虽然进程使用系统调用来访问内核,但在600个可用调用中大多数很少用到。要是没有这些调用,有望减小潜在的攻击面。Daniel Walsh在红帽公司从事容器安全工作。他认为,开发人员有望将可调用系统调用的数量最多减少50%。

此外,开发人员在期望完善对Docker服务的访问,补充验证选项。这么做意味着,并没有根授权以访问主机的用户可以使用这项服务。如果开发人员另外引入RBAC,Docker管理员就能为用户分配不同的角色,因而为他们提供与守护进程进行交互的受限制权限。在这些方案的帮助下,应该可以在未来进一步限制对容器或功能的访问。

结束语

Docker开发人员已经在许多方面积极响应,加强容器的安全,他们在继续添加新的功能特性,保持这个势头。最近为版本1.8中的Docker映像推出了一种验证系统,那就是内容信任Content Trust。此外,开放容器计划Open Container Initiative正考虑将更多的精力投入到安全方面上。

未来仍需要做大量工作。比如说,需要定义容器管理方面可持续的最佳实践,以促进容器在企业得到更广泛的使用。

这是一个被问及了一次一次一次的问题。

我就是一个会写代码的产品经理。我曾作为不同的角色有大约10年的专业编程经验,甚至还写过基本技术书籍和做过一些演讲。大约5年前,我转向了做软件产品管理,这使得我可以只在晚上和周末才写代码(只是因为兴趣)。

以我的浅见,如果你有专业的软件编程经验的话,这对你做产品经理觉得是一个很大的加分项。如果你缺乏这些经验,可以每周花费几小时来学习一下。

理解开发人员

产品管理的一部分,是做一个优秀的沟通和谈判代表。有过开发经验的价值是,你可以更好的与你正在一起工作的开发人员用他们的语言沟通。

如果你自己曾经开发过软件:

  • 你会知道需求变更的感觉以及与团队中其他固执己见的人的代码有冲突时的压力
  • 你会知道在一个严格的截至期限下,使用一个设计不合理的第三方 API 的感受
  • 你会明白回答“需要多长时间”会牵涉到多少方面
  • 你会被 KISSYAGNI 以及 Conway’s Law所吸引
  • 你会花费几天甚至几周时间解决Heisenbugs,每次你以为你已经解决了问题,之后你就会收到一份“不起作用”的报告,因为一些特殊的浏览器、操作系统、设备或者分辨率大小
  • 这意味着你已经分心了足够长的时间,你应该把干扰降到最低
  • 你会感受到代码重构带来的恐惧

作为一个产品经理,了解这些可以使你把自己放在一个更好的位置与软件开发人员工作、了解他们正在处理的挑战、更好的达到你期望的目标。

当然,不要参与讨论代码设计、架构以及使用何种语言,这从来都不是你的工作职责,如果你真这么做了,结果可能是弊大于利的。

如果不会写代码会怎样?

缺乏写代码的经验就意味着不能成为一个合格的产品经理吗?

在过去的大约15年时间内,我至少与4位不懂代码,但却非常优秀的产品经理一起工作过,这意味着不懂代码也可以做好产品经理。

但更多的情况下,我看到的是硬币的另一面,产品经理经常与开发人员争吵,因为他们缺乏最基本的软件开发常识。当然,他们的这种争吵并没有什么帮助。相反,这意味着他们的项目经常不能实现。

根据我工作过的产品经理来看,答案是很明确的:这要看情况。但其中有三大要素是必须的:兴趣(关注、倾听)、谦卑(承认无知、提出问题),并愿意学习(例如,你真正阅读的人月神话)。