发布网友
共6个回答
懂视网
~$ mongod
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] MongoDB starting : pid=26124 port=27017 dbpath=/data/db -bit host=jonny-PC
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] db version v3.2.11
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] git version: 009580ad490190ba33d1c6253ebd8d918023e4
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2k 26 Jan 2017
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] allocator: tcmalloc
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] modules: none
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] build environment:
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] distarch: x86_
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] target_arch: x86_
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] options: {}
2017-07-13T19:24:32.131+0000 E NETWORK [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017
2017-07-13T19:24:32.131+0000 E NETWORK [initandlisten] addr already in use
2017-07-13T19:24:32.131+0000 E STORAGE [initandlisten] Failed to set up sockets during startup.
2017-07-13T19:24:32.131+0000 I CONTROL [initandlisten] dbexit: rc: 48
mongo 是客户端
~$ mongo
MongoDB shell version: 3.2.11
connecting to: test
>
直接连上了本地的服务器。
使用数据库和集合前不用建立,执行插入数据时会自动建立
这一点和关系型数据库不同。用之前必须要先创建 数据库和表。否则不行,但是mongodb不一样,用之前不需要创建。
比如我们要使用test数据库
MongoDB shell version: 3.2.11
connecting to: test
> use test
switched to db test
>
提示已经切换到test数据库
再比如我们要用一个stu数据库,其实之前没有,但是直接use stu
> use stu
switched to db stu
只有当我们向这个数据库里插入数据,这个数据库才会真正建立
比如我们现在先 use test 切换到 test数据库
然后插入一条数据:
集合是blogg
> use test
switched to db test
> db.blogg.insert({‘id‘:1,‘title‘:‘myblog‘})
WriteResult({ "nInserted" : 1 })
>
WriteResult,这两个键值对 就插入成功了。
也可以这样,预先定义你要插入的内容
> d = {‘id‘:2,‘title‘:‘yourblog‘}
{ "id" : 2, "title" : "yourblog" }
> db.blogg.insert(d)
WriteResult({ "nInserted" : 1 })
我们查询一下
多插2条,查询:
> db.blogg.insert({‘id‘:2,‘title‘:‘myblog2‘})
WriteResult({ "nInserted" : 1 })
> db.blogg.insert({‘id‘:3,‘title‘:‘myblog3‘})
WriteResult({ "nInserted" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
注意这里O是大写
> db.blogg.findOne()
{
"_id" : ObjectId("5967cc37f9e6f46246252b79"),
"id" : 1,
"title" : "myblog"
}
比如我只要id为2的
> db.blogg.findOne({‘id‘:2})
{
"_id" : ObjectId("5967cc9bf9e6f46246252b7a"),
"id" : 2,
"title" : "myblog2"
}
> db.blogg.insert({‘id‘:2,‘title‘:‘myblog2‘})
WriteResult({ "nInserted" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
> db.blogg.find({‘id‘:2})
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
这里的 "_id "是mongodb 自己创建的。每个文档的id不一样
比如我们 增加或修改指定键值对
修改 id 为1 title 从myblog改成myblog1
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
> db.blogg.update({‘id‘:1},{‘$set‘:{‘title‘:‘myblog1‘}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog1" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
若没找到,则新建 键值对:
比如 id为1的 再插入一条 titile-2 ,myblog1-2
> db.blogg.update({‘id‘:1},{‘$set‘:{‘title-2‘:‘myblog1-2‘}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find({‘id‘:1})
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog1", "title-2" : "myblog1-2" }
>
> db.blogg.update({‘id‘:1},{‘$unset‘:{‘title-2‘:‘myblog1-2‘}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find({‘id‘:1})
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog1" }
>
比如修改id 的值,增加可以为负数 比如 -2
> db.blogg.update({‘id‘:1},{‘$inc‘:{‘id‘:-2}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
>
见到了之后,操作后变成了id -1
比如修改id 为 -1 的 记录,发现没有 size 则新建了。
> db.blogg.update({‘id‘:-1},{‘$set‘:{‘size‘:10}},true)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find({‘id‘:-1})
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" : 10 }
>
比如三个id为2的文档,匹配的3个都被新增了 size 为7 的键值对。
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" : 10 }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
> db.blogg.update({‘id‘:2},{‘$set‘:{‘size‘:7}},false,true)
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" : 10 }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2", "size" : 7 }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2", "size" : 7 }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog", "size" : 7 }
>
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" :
var cpro_id = "u6292429";
热心网友
现在,几乎整个互联网行业都缺前端工程师,不仅在刚起步的创业公司,上市公司乃至巨头,这个问题也一样存在。没错,优秀的前端工程师简直比大熊猫还稀少。
每天,100offer的HR群都有人在吐槽招不到前端工程师。实话说对这些需求,Betty也*为力,因为在供不应求的前端招聘市场上,优秀的前端工程师才是有话语权的那一方。
放眼全球,不仅在国内的互联网行业,在国外,前端工程师一样是需求旺盛、供不应求的香饽饽。
举个例子,根据indeed.com抓取的数千家网站的职位显示:目前前端的热门岗位——「HTML5」是需求增长最快的开发岗位,在所有开发职位中排名第一,MongoDB和iOS紧随其后位列第二、第三。
jobgraph
可见,HTML5可以说是最热门的前端岗位了,在2010年和2014年底有两次爆发性增长,现在在美国的岗位需求甚至超过了iOS。
所以市场上优秀的前端工程师相对较缺少,是一个世界性难题。
原因一:前端相对来说是一个新领域,当今的web需求要求更多的工程师供应
可能很多人认为前端开发和web开发类似,而web开发已经有20多年的历史,所以前端并不是一个新领域。然而,前端工程师的概念中的「接*术实现和用户体验作为一个专业的工作领域」,却无疑是很新的。大概几年前,前端开发的技术增长迅猛,如下图所示:
过去几年前端工程师的可视化增长趋势 by Google Trends
15年或更久以前,web的可视化设计和技术实现所需要的资源是平均分配的。随着网站的发展——网站不仅是一个登录页面,工程资源的需求越来越明显。人们开始专门学习网站专用的JS、后端技术、UX、数据库,甚至系统设计。
今天,一个像AirBnB/*/Quora的Web应用程序,投入的工程资源比设计资源多得多。换句话说,如今,做出网页的视觉设计比技术实现要更快,所以当今的web需求要求更多的工程师供应。
现在,一位合格的前端工程师,必须对视觉设计有兴趣(或者乐于做一个受虐狂▼)。
CSS.jpg
很显然,要处理大量的Web应用程序需求,技术任务就要进行分类,以便于多人同时处理网站请求。事实上现在已经不可能一个人快速地解决所有的技术细节了。
现在还有一类人是独自处理一个Web应用程序的所有问题,即「全栈工程师」,但是优秀的全栈工程师同样如大熊猫一般数量稀少。
现在,一个创业公司想要成功,几乎要覆盖一个Web应用程序的诸多技术方面:前端、后台、DBA、运营等。虽然已经有一些服务可以让企业购买登陆页面的前端模块和组件;但是如果你想要创造一些真正的Web应用程序,除了求助前端工程师,别无他法,就像你要创立一个品牌你也绕不开请一位设计师一样。
原因二:对前端,普遍存在巨大的误解,其实前端一点也不简单
大多人都认为前端开发是一个「相对于其他模块来说更简单的领域」,在他们心中的前端工程师是这样工作的:
1、把Photoshop文件、图片或者线框做成一个页面;
2、偶尔设计Photoshop文件、图片或者线框;
3、用JS实现动画、过渡效果;
4、用HTML和CSS编程,实现网页的内容和形式。
事实上,前端工程师在做的是:
1、在设计师和工程师之间创建可视化的语言;
2、根据设计稿定义一组代表内容、品牌和功能的组件;
3、为Web应用程序的框架、需求、可视化的语言和规格设定基准;
4、根据设备、浏览器、屏幕、动画来划分web应用的工作划分;
5、用QA基准来保证指南来确保品牌忠诚度、代码质量、产品标准;
6、调节Web应用程序的样式,包括间距、字体、标题、图标、布局等等;
7、根据不同分辨率、横屏竖屏等,调节Web应用程序的样式;
8、标记 Web 应用程序,使之语义化,SEO 友好;
9、通过API获取内容要考虑友好性、电池消耗性、设备和客户端的特性;
10、开发客户端要考虑动画的流畅、延迟加载、交互、应用工作流程,大多数时间用来考虑渐进增强和向后兼容的标准;
11、保证后台连接安全,采取跨地资源共享( CORS )的程序考虑,防止跨站点脚本( XSS)和跨站点请求伪造( CSRF ) ;
12、最重要的是,尽管有严格的期限、利益相关者的要求,以及设备的*,无论现在还是将来永远是「客户第一」。
为了实现上述目标,前端工程师采用了从可视化到编程的多种工具 ,甚至有时要照顾市场、 UX 到内容tweakes等等。
原因三:大量糟糕前端工程师的存在,扰乱了市场
这或许是难以招到优秀前端工程师最明显的原因。由于前端工程师的入门门槛非常低,JS、CSS、HTML并不是很难入门掌握的语言,似乎只要花一点时间,谁都可以通过网上教程和书本学会它。对的,前端工程师市场就是被这些浅尝辄止的家伙搞坏的。
糟糕的前端工程师是这样做事的:
1、滥用 JavaScript 库,因为他们实际上并不了 JavaScript 的核心(e.g. 一切都用 jQuery);
2、滥用 JavaScript 插件,无节制的复用别人的代码,哪怕自己根本读不懂;
3、不看需求、设计,也不做比较或评价,就给 Web 应用程序添加 CSS 框架,却只用到框架的一小部分;
4、认为只要用了 CSS 框架,网站就是响应式的,或是对响应式设计的意义理解不到位;
5、一边在说着「响应式 Web 设计」,却对服务器端解决方案技术一无所知;
6、用 CSS 编程时不做预处理器、命名规范等;
7、忽视性能、内存泄露(并不理解内存泄露的真正含义),不会检测代码;
8、不会用指标衡量一个产品,或者这种指标旨在自己的电脑、浏览器、设备有效;
9、忽视 30 年来的软件工程技术,闭门造车。
要知道,入门容易精通难,计算机和软件的基础对你用JS或浏览器编程都非常重要。web可能是最有影响力的平台和环境之一,在那里执行的程序必须被小心对待。一位优秀的前端工程师不仅要考虑web技术和语言,并且还要了解所有不同的组件、系统和概念。
以下是优秀的前端工程师在即时面对普通的任务也会做的事情(这才是市场急需的前端):
1、DNS 解析,使用 CDN,把资源请求分散到多个域名上去;
2、理解 HTTP Headers (Expires、Cache-Control、If-Modified-Since)
3、Steve Souders 的所有高性能网页优化规则(参考:High Performance Websites 一书)
4、如何解决 PageSpeed、YSlow、Chrome Dev Tools Audit、Chrome Dev Tools Timeline 等工具列出的所有问题;
5、何时把任务传到服务器,何时适合传到客户端;
6、缓存,预取和延迟加载技术的使用;
7、原生 JavaScript,知道何时从头开始做,何时参考别人的代码,同时可以评估这样做的优缺点;
8、 最新的 MVC Javascript 库知识以及用法;
9、CSS 标准的知识与用法;
10、JavaScript的计算机科学部分的知识(内存管理,垃圾收集算法等等)
换句话说,如果说精通HTML+CSS+JS,了解后端知识,只是60分的合格前端;那么要想成为受追捧、拿高薪的80分优秀前端,要对业务需求和、架构设计有真正的运用;而100分的顶级前端,则必须要能够兼顾技术和设计,更接近「以前端开发为主的全栈工程师」了。
100offer 说:市场不是缺少前端,而是缺少优秀的前端工程师
现在,前端工程师终于前所未有的在web中占有了一席之地。随着多设备、浏览器和Web标准的演变*,前端正在成为兼顾逻辑、性能、交互、体验的综合性岗位。
虽然现在互联网行业普遍缺少前端工程师,但是我们相信越来越多的人将会加入前端的大军。不仅是因为大多数前端工作提供的优渥薪水和办公环境,也是因为web中的前端编程变得越来越有挑战和意义。
最后,分享一组3~4月的100offer拍卖数据,给前端们鼓鼓劲:
前端工程师人均收获8.2个面试机会,已入职的前端工程师平均薪资涨幅达39%。其中,前端offer之王共收获47个offer,最高offer薪水38k*16 ,开自某土豪电商。
加油吧,前端!
热心网友
因为前端工程师需要掌握的技术和知识多,技术含量高,且要有策划和美术视觉能力。
热心网友
最大的区别是前端工程师需要有“创意”,得是一个标准的创客,而创意是教育十几年之后的高材生都未必具备的东西,前端可以说就是一种设计加高端的实现,而设计对于前端才是最重要的,企业永远不缺会编码的人,而缺有创意的人。
热心网友
在前端这方面的工程师已经面临着转型期,随着html5的到来,越来越普及,对前端工程师的要求越来越高,也使得前端工程师的门槛不断变化,在加上一些公司对前端工程师的要求不断提升,很多学了前端开发的程序员都会选择转型。
热心网友
随着互联网技术的深入应用,软件产业已成为21世纪拥有最大产业规模和最具广阔前景的新兴产业之一,软件工程师被越来越多的大众所了解,虽然大多数人都对软件工程师已经有了一些正确的认知,但是依然存在少部分人对于软件工程师的定义还有所误解,还是容易混淆软件工程师和修电脑的维修师这两者的定义