jsslice,如何学习go语言?
Go语言这几年发展的确实不错,虽然没有实现赶超C++的目标,但是已经很接近了。而这些年也出现了一些Go语言的有名的项目,比如 kubernetes、Docker、Etcd、Tidb等项目。
我这里整理了一份关于Go语言的学习路线,也可以辅助你做判断。Go语言是一门全新的静态类型开发语言,具有自动垃圾回收、丰富的内置类型、函数多返回值、错误处理、匿名函数、并发编程、反射、defer等关键特征。从语言层面来说天然支持并发,可以充分利用CPU多核,并且非常适合用来进行服务器编程、网络编程和分布式编程等。在云计算领域,用Go语言编写的云基础项目如Docker、Kubernetes都取得了巨大的成功,别外还有知名的项目如Etcd、consul、flannel等,也都是使用Go语言实现的。为你提供几张学习Go语言的线路图,从基础到进阶、Web编程、微服务的学习,你可以参考一下。基础学习
书籍推荐
《Head First Go语言程序设计》、《Go语言学习笔记》、《Go语言趣学指南》、《Go语言编程》当然,不必所有的书都读,找其中一本学习即可。在线学习Go语言资料
Go By Example 中文版 : https://gobyexample-cn.github.io,使用代码示例来学习 Go 语言。 Go 面试题 : http://www.topgoer.cn/docs/gomianshiti/mianshiti,也是使用代码示例来讲解 Go,用来准备面试也是很好的。 无闻大佬的在线入门指南 : https://github.com/unknwon/the-way-to-go_ZH_CN跟着单元测试学习 Go : https://github.com/quii/learn-go-with-tests,有中文版。初级练手项目
starcharts : https://github.com/caarlos0/starcharts,项目的功能是生成 Github 上面的项目的 star 趋势图,核心代码不多,用来练手很合适。 gorched : https://github.com/zladovan/gorched,使用 Go 写的一个小游戏。 pacgo : https://github.com/danicat/pacgo,也是使用 Go 写的一个小游戏,每一步都有详细的描述和代码实现。 wechat-go : https://github.com/songtianyi/wechat-go,微信 web 版 API 的 Go 实现,模拟微信网页版的登录/联系人/消息收发等功能。Go语言进阶
书籍推荐
《Go程序设计语言》、《Go专家编程》、《Go语言高级编程》、《Go并发编程》在线学习Go语言资料
1.《Go 语言设计与实现》: https://draveness.me/golang。2.《Go 语言高级编程》: https://chai2010.cn/advanced-go-programming-book。进阶练手项目
rosedb : https://github.com/roseduan/rosedb,一个用 Go 实现的简易高效的 k-v 存储引擎。 gochat : https://github.com/LockGit/gochat,一个 Go 语言实现的轻量级 im 系统,对网络方面熟悉或者感兴趣的可以看看。 7DaysGolang : https://github.com/geektutu/7days-golang,7 天使用 Go 从零实现 web 框架、分布式缓存、ORM 框架,、RPC 框架,代码量不多,但是质量挺不错的Go Web编程
书籍推荐
《Go Web编程》在线学习资料
可以学习下 web 框架 Gin、beego:两个框架都比较的流行,选择其中一个其实就可以了,推荐 Gin。官方文档都有中文,照着 demo 敲一下,了解下怎么处理 HTTP 请求的。其次还需要掌握一下比较流行的 ORM 框架 Gorm,有官方中文文档,照着 demo 敲一下基本上两天就能掌握了,后面遇到不会的再来查。Web框架相关的,基本上看官方文档就可以了,就不用再去找专门介绍的书籍,没有比官方文章更正宗的资料了。除框架之外,你还需要学会的是包括但不限于:web的逻辑,Http协议,grpc,session,cookie等这些web的基础知识数据库方面MySQL、Redis、MongoDB等中间件Kafka、Etcd等文件文件处理,XML、JSON、正则等安全与加密,预防CSRF攻击、XSS攻击、SQL注入等,加密解密等Go Web项目推荐
gin-vue-admin : https://github.com/flipped-aurora/gin-vue-admin,使用 Gin 框架构建的后台管理系统。 ferry : https://github.com/lanyulei/ferry,基于 Gin + Vue + Element UI 前后端分离的工单系统。 go-admin : https://github.com/go-admin-team/go-admin,Gin + Vue + Element UI 的前后端分离权限管理系统。Go 微服务
目前 Go 在微服务中的应用也比较广泛,但说实话,微服务是一个太庞大的话题,你不可能把每一个核心的问题都能够搞清楚,而且也没条件,或许只能在公司的具体的微服务生产环境中,才能够对相关的概念有更加深刻的体会。推荐一本微服务概述的基础书籍《微服务设计》、《微服务架构设计模式》,可以帮助你理解微服务的建模、集成、测试、部署和监控的一些基础知识。其次,你可以看一下《Go微服务实战》这本书,看后半部分即可,里面其实介绍的还是关于微服务方面的知识。推荐 Go 语言的微服务框架 GoKit、GoMicro、go-zero、kratos,可以随便选择一个,理解其基本的用法、设计等等。其中 go-zero 和 kratos 是国内开源的,因此都有比较详细的中文文档。在线学习的资料:
https://ewanvalentine.io/microservices-in-golang-part-1手把手实现一个简单的 Go 微服务项目,你可以通过这个项目来学习微服务的相关知识,并且有中文版。Go语言原理研究
如果你对Go语言底层原理感兴趣的话,可以看下这本书《Go语言底层原理剖析》。开源项目学习
在项目开发过程中,也会用到各种开源项目。一开始没必要直接钻研源码,先要学习开源项目背景,能解决什么问题,开源作者的项目理念,使用了哪些技术等等。这些清楚以后,可以找自己感兴趣的技术点或者模块去针对性的学习,千万不要想着一开始就想一网打尽式的学习,没有针对性意味着没有重点,没有重点很大概率就会白学或者学到的就会很少。先推荐几个经典的开源项目供你参考:www.docker.com 使用 docker 来做虚拟化https://github.com/nsqio/nsq 学习消息队列,学习 channel 和分布式https://github.com/coreos/etcd分布式应用如果你有自己比较看好的开源项目会更好,兴趣永远是前进的第一步。相对前几年,Go语言的书籍、教程,各种文章都如雨后春笋一般越来越多,学习起来也更加方便,但是同时也要注意不要过度陷入知识碎片而无法自拔,最重要的还是要去系统去学习一下,针对性的练习、实践和应用。javascript对象有哪些?
JavaScript 中的所有事物都是对象,如:字符串、数值、数组、函数等,每个对象带有属性和方法。
对象的属性:反映该对象某些特定的性质的,如:字符串的长度、图像的长宽等;
对象的方法:能够在对象上执行的动作。例如,表单的“提交”(Submit),时间的“获取”(getYear)等;
JavaScript 提供多个内建对象,比如 String、Date、Array 等等,使用对象前先定义
下面举例一些
Array对象中常用方法:
Concat():表示把几个数组合并成一个数组。
Join():返回字符串值,其中包含了连接到一起的数组的所有元素,元素由指定的分隔符分隔开来。
Pop():移除数组最后一个元素。
Shift():移除数组中第一个元素。
Slice(start,end):返回数组中的一段。
Push():往数组中新添加一个元素,返回最新长度。
Sort():对数组进行排序。
Reverse():反转数组的排序。
toLocaleString();返回当前系统时间
Array对象属性常用的只有一个:
Length:表示取得当前数组长度
Global对象
是一个固有对象,目的是把所有的全局方法集中在一个对象中。
Global没有语法,直接调用其方法。
escape(): 对 String 对象编码以便它们能在所有计算机上可读.
escape(charString)
必选项 charstring 参数是要编码的任意 String 对象或文字。
isNaN():判断一个值是否是NaN。
parseInt():返回由字符串得到的整数
正则表达式对象
本对象包含正则表达式模式以及表明如何应用模式的标志。
语法 1
re = /pattern/[flags]
语法 2
re = new RegExp("pattern",["flags"])
re为将要赋值正则表达式模式的变量名
pattern为正则表达式
flags为标记:有如下3中
1:g(全文查找)
2:i(忽略大小写)
3:m(多行查找)
当预先知道查找字符串时用语法 1。当查找字符串经常变动或不知道时用语法 2,比如由用户输入得到的字符串。
String对象
charAt():返回指定索引的位置的字符
concat():返回字符串值,表示两个或多个字符串的连接
match():使用正则表达式模式对字符串执行查找,并将包含查找结果最为结果返回
function MatchDemo(){
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = /ain/i; // 创建正则表达式模式。
r = s.match(re); // 尝试匹配搜索字符串。
return(r); // 返回第一次出现 "ain" 的地方。
}
Replace(a,b):字符b替换a
Search(stringObject):指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。
Slice(start,end):返回字符段片段
Split():字符串拆分
Substr(start,length):字符串截取
Substring(start,end)取得指定长度内的字符串
toUpperCase():返回一个字符串,该字符串中的所有字母都被转化为大写字母。
toLowerCase():返回一个字符串,该字符串中的所有字母都被转化为小写字母。
Math对象
ceil():向上取整。
floor():向下取整。
round():四舍五入。
random():取随机数。
Date对象
get/setDate():返回或设置日期。
get/setFullYear():返回或设置年份,用四位数表示。
get/setYear():返回或设置年份。
get/setMonth():返回或设置月份。0为一月
get/setHours():返回或设置小时,24小时制
get/setMinutes():返回或设置分钟数。
get/setSeconds():返回或设置秒钟数。
get/setTime():返回或设置时间(毫秒为单位)
学习web前端开发?
黑马程序员web前端中级程序员学习路线图,含配套视频,前端工具,源码等。
黑马程序员学习路线图及能掌握的能力(总,以下会分阶段,加上配套学习视频,小伙伴可继续往下看!)
第一阶段:HTML5+css
配套学习视频:
前端小白零基础入门HTML5+CSS3
第二阶段:移动web网页开发
配套学习视频:
2018移动web进阶教程
第三阶段:JavaScript网页编程
配套学习视频:
前端与移动开发基础入门到精通
javaScript零基础通关必备教程
第四阶段:Node.js与Ajax
配套学习视频:
Nodejs教程精讲
ajax从入门到精通
第五阶段:vue.js项目实战
配套学习视频:
4小时+5个拣选案例让你快速入门Vue.js
2018年Vue.js深入浅出教程
第六阶段:微信小程序
配套学习视频:
一天教你打造企业级微信小程序
微信小程序-个人语音接口功能
分分钟快速入门小程序开发
零基础玩转微信小程序
2小时轻松实现人脸识别的小程序
第七阶段:React.js项目实战
配套学习视频:
Reactjs入门教程
ReactJs精品教程
第八阶段:框架阶段与原理
第九阶段:移动APP开发
第十阶段:node.js进阶
第十一阶段:可视化游戏
第十二段阶段:架构与运维
还有前端免费工具下载
另外,关注加转发,然后私聊我发送:前端,就能获得上面这些资源咯。
如何看待谷歌浏览器个人信息泄露这方面?
金山毒霸实验安全专家表示,谷歌那边也是有安全审计策略,谷歌浏览器插件,大家一般都感觉很靠谱的。但是这些插件的权限大于网页的,如果插件被植入恶意代码,那就有可能出现浏览器一切行为被监控,从而出现个人信息泄露。建议大家先行卸载该插件,会进一步跟进该事件的情况。
事情来龙去脉最初,一个论坛用户在知名论坛披露Chrome插件User-Agent Switcher内含恶意代码。在帖子中(如下),该插件在Chrome商城排名第一,下载量高达45万,意味着目前这个影响范围较大的。为了绕过谷歌浏览器审计策略,伪装藏在prome.jpg里。在未经用户授权情况下,上传用户网络访问记录,并在页面插入相应广告,可能存在侵犯用户隐私行为。
为什么谷歌浏览器插件可以导致个人信息泄露金山毒霸实验安全专家,表示谷歌那边也是有安全审计策略,谷歌浏览器插件,大家一般都感觉很靠谱的。但是这些插件的权限大于网页的,如果插件被植入恶意代码,那就有可能出现浏览器一切行为被监控,从而出现个人信息泄露。建议大家先行卸载该插件,会进一步跟进该事件的情况。
http://www.toutiao.com/i6464342544934240782/---------------------------------------------深入了解----------------------------------------------------------文章来自:懒人在思考公众账号
昨天看到 V2EX 上的这个讨论:
大家注意了 Chrome 的插件 User-Agent Switcher 是个木马
https://www.v2ex.com/t/389340
对于我这种很在意隐私与安全,且研究过 Chrome 扩展木马的老司机来说,也还是吓了一跳。刚开始以为自己也中招了,后来发现没有,如果有,那这个确实是很细思恐极的事。
Chrome 扩展,在 Google 那是有安全审计的,所以基本上会觉得靠谱,但是对于玩安全的我们来说,都是默认抱着怀疑的态度去安装一些扩展。你们只要注意下,那些你安装的扩展需要的权限是不是很多?(这点很像 Android App 的权限生态,同样的陋习)。如果这些扩展是恶意的或者存在 XSS、MITM 等漏洞被恶意利用,那么危害就很大了。扩展的权限是大于网页的(但一般情况下小于本地文件),至少可以无视同源策略。这意味着,如果你安装了一个恶意扩展,那么在这个浏览器的一切行为都有可能被监控,隐私数据都有可能被盗取。
当年我挖掘过一些扩展漏洞,达到的效果如:访问我的一个链接,就可以拿你 Gmail 权限。也写过扩展后门及相关安全工具,早期这方面更不安全,第三方扩展都可以随意安装,现在安装会麻烦得多,但不是不可以。
这是我玩 Chrome 扩展的一些见解。这次这个后门,我手工逆起来很快,给大家简单分享下经验。
首先是后门扩展地址:
https://chrome.google.com/webstore/detail/user-agent-switcher-for-g/ffhkkpnppgnfaobgihpdblnhmmbodake
可以随便搜索个 Chrome 扩展下载服务把扩展文件下载下来分析。比如这个:
https://chrome-extension-downloader.com/
扩展后缀是 crx,改为 7z,解压就好。
解压后,直接去读相关文件:js、html、json 等,可以先看看 manifest.json 文件,这里做了这个扩展需要的基本声明,尤其是权限,如下:
可以看到这个权限已经足够控制你 Chrome 的一切网络行为了,只要它愿意。
然后直入主题去看这次出问题的 js 文件:background.js,第 80 行,这行是一大段代码,做了些加密操作,可以用我开源的 XSS'OR(http://xssor.io)直接去解。
把这行代码粘贴到 XSS'OR 的 ENCODE/DECODE 的文本框去,然后点击 JS BEAUTIFY 就可以一键解密并美化。
美化后,里面的 Canvas 操作逻辑就很明显了,恶意代码隐藏在图片 promo.jpg 里,通过 Canvas 技术读取出来并应用下面这个技巧来动态执行:
document.defaultView[(typeof r.Ae).charAt(0).toUpperCase() + (typeof r.Ae).slice(1)](n)()
实际上,这个技巧等于:
document.defaultView[Function](n)()
n 这个变量可以是任意一段 JavaScript 代码。
我们在做调试时,可以把这些代码片段拿出来,在 XSS'OR 的 ENCODE/DECODE 里进行,用其中的 EVAL CODZ 功能就好(在 JS BEAUTIFY 按钮旁边)。调试输出,可以用 alert,也可以 console.log,看个人喜好。
不过由于这里涉及到从图片里获取数据并解析输出,我还是写了个独立页面进行手动调试,这里:
http://xssor.io/s/uasbackdoor.html
注:独立页面的调试可以考虑用在 Chrome 开发者工具里去断点调试跟踪输出。
你可以访问看看,等几秒,就可以看到上面那个 n 变量的内容了(来自 promo.jpg 图片并解析后的)。内容不小,如图:
这段内容很眼花,但是我们已经可以接触到真相了。后续可以继续通过 XSS'OR 的 JS BEAUTIFY 去美化,但是还是会很眼花,因为所有变量都加花了,而且这里运用了大量 ES6 语法糖,如果对 JavaScript 新标准不了解,看这段代码很容易晕。
到这,重复上面的一些调试技巧逐一耐心调试,没有解不开的代码。
如果你想更清晰了解某些代码片段的意思,有必要好好去了解下 Chrome 扩展开发的一些知识。
更多细节自己实战起来吧,这里懒得展开。通过昨晚的简单调试可以得出结论这个扩展确实具备后门特点,不过懒得深入判断细节逻辑,至于危害是多大,目前不好说。但是,我还是希望通过本文的分享,告诉大家小心 Chrome 恶意扩展带来的威胁,在使用一些不那么可信的扩展时,多留意。可以开个网络抓包分析是否有怪异请求发出去,能力 OK 的话,就自己审计一番,扩展的源码按照如上方式是可以轻易得到的,毕竟都是前端那些事。
http://mp.weixin.qq.com/s/h7m7-luE4nW_utaZhUrKEAjs中map和filter的返回类型?
我肯定造啊 concat( )连接数组——>返回新数组 join(separator)将数组元素连接起来构建成一个字符串——>返回字符串 reverse()颠倒数组中元素的顺序——>返回原数组 slice(starpos, endpos)返回数据的一部分——>返回新数组 splice(start,deleteCount,value)插入、删除或替换数据的元素——>返回原数组


还没有评论,来说两句吧...