《前端面试江湖》读书笔记
本来很久以前就该把前端面试系列的文章更新完,但是自己懒,加上发现网上有些文章确实写的不错,就一直拖着没写。但是有次去图书馆,看到一本书叫《前端面试江湖》,索性找了一个时间,把全部内容整合到一起。这里面肯定有你不了解的东西,那些东西能够很大程度上提高你的开发效率。这本书2016年5月出的,却还在讲JQuery。所以有些地方我对其进行了补充如何处理IE和Firefox如果处理事件兼容性获取事件:functionet(e){letevent=window.event||e}键盘值的获取:Firfox下event.which和IE的event.keyCode相当letkey=event.keyCode||event.which事件源的获取:lettarget=event.srcElement||event.target事件监听:IE:element.attacthEvent('on'+eventName,function(){})Firfox:element.addEventListene
Element 中的 AT 可访问性
首发于饿了么前端写文章登录Element中的AT可访问性小冉6hoursago定义:AT是什么?AT是AssistiveTechnologies的简写,是指具有以下特征的硬件或者软件:依赖UA(UserAgent,下文简称”UA“)提供的服务来提取和呈现页面内容通过API和UA进行交互提供了一系列服务来方便残障用户和网站内容进行交互其中包括:屏幕放大器、屏幕阅读器、文语转换软件、语音识别软件、输入替代设备、鼠标替代设备等;主要技术:ARIA可访问的页面内容是指页面结构、页面组件和行为具有语义化,使得AT设备能正确理解和传达页面内容给残障用户,ARIA是AccessibleRichInternetApplications的简称,是W3C推出的,用来协助和增强InternetApplications的可访问性,提高与AT的互操作性的规范。ARIA提供了一组特殊的易用性属性,其中包括roles,states和properties,可以添加到任意标签上,尤其适用于HTML5
几种方法找到整型阵列中的最大值和最小值
staticvoidMain(string[]args){int[]value={15,23,41,97,100,27,67,51};Console.WriteLine("Class3:");Console.WriteLine("Max:{0}",Class3.FindMaxNumber(value));Console.WriteLine("Min:{0}",Class3.FindMinNumber(value));Console.WriteLine("Class4:");Console.WriteLine("Max:{0}",Class4.FindMaxNumber(value));Console.WriteLine("Min:{0}",Class4.FindMinNumber(value));Console.WriteLine("Class5:");Console.WriteLine("Max:{0}",Class5.FindMaxNumber(value));Console.WriteLine(
DevExpress v17.2—WinForms篇(五)
DevExpress首推团队升级培训套包,最高可省10万元!查看详情>>>用户界面套包DevExpressv17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。开篇介绍了DevExpressWinFormsv17.2DataGridControl、DiagramControl、Editors等的新功能,快来下载试用新版本!SpreadsheetControlChartSheets在这个版本中,WinForms和WPF的DevExpressSpreadsheet使您能够通过创建图表(查看,编辑或在自己的页面内打印图表)将图表放置在单独的工作表上。TreeListControl数据网格和树列表的拖放管理器v17.2为WinFormsDataGrid和TreeList控件提供了自动拖放引擎。使用我们新的DragAndDropBehavior(操作管理器的一部分),您可以用几行代码在各种组合中启动数据网格,树列表和列表框控件之间的拖放操作。层次结构列在以前的版本中,TreeList的层次
CYQ.Data 正式支持 DotNET Core 版本发布
闲话几句:自从上周开始,IOS人员逝去,就开始接手IOS的代码了。并开始整理IOS的代码(包括当时一开始设计的开发框架)。在未来不远的日子里,设想是有一个系列详细的介绍I恋App和IT连App及前后端所有涉及的技术系列。同时还准备发布一个IOS的开发框架,为十二星座再凑一个成员。闲话结束,下面看正文:CYQ.Data支持DotNetCoe的折腾过程:大约是上周五,在提交CYQ.DataV5.5.8.1版本到Nuget后,看着C盘还有7G发了一会呆。之后做了一个决定,卸载了VS2015,现在C盘有10个G。到了微软官网,下载了社区版,把VS2017给装上了,好在可以选组件,只挑.NETCore相关的,5个多G就完事。安装好之后,建一个类库工程,把整套源码Copy过去,依赖项就是我们平时引用dll的地方:开始编绎,并见证奇迹:一堆错误。还好,VS2017在错误提示方面很人性化,分批给你显示错误数,让你解决一批再出来一批。不像当初在VS2015折腾.NETCore1
大公司应该构建自己独特的技术体系
周五的时候,特别郑重的在“简书”里写下一个标题“响应式编程”。然后这个周末茶饭不思的就在脑子里一直构思这篇文章,总记得“老赵”在几年前写过类似的东西,各种找他的博客。最后发现是自己记错了。想了很多以后发现并没有太想好怎么写响应式编程,反而发现了这几年技术转型之路的一个大BUG。1我刚入行的时候没有传统IT企业和互联网企业的区分,只有国内的软件公司和外企之分,我们那时候的梦想都是如何才能进微软、GOOGLE、IBM。网上总有前辈高人说,千万别去大公司(这个论调和现在倒是完全一样),大公司的软件架构全都是自己独特的,进去后就再也不会写别的东西了,想跳槽都跳不了,里面的东西外面完全不用。当时心里其实有两个念头,反正哥们也进不去爱用啥用啥;大公司真任性,这么多现成技术非要自己搞独特的。现在这个年代,已经没有太多人说外企了,大家都是讲传统和互联网。技术大一统啊,大大小小的公司都在2-3套技术框架中选一套自己合适的完事了。弄熟一套走到哪也不陌生。2我过去一年的时间,工作的很大重心一直都在招聘上。实话实说越招心越凉,开始的时候还能挑挑,是有
Apache Pulsar的多租户消息系统
在之前的博客文章中,我们介绍了多个选择ApachePulsar作为企业级实时业务所用消息解决方案的原因。后续文章中,将会深入介绍其中的一些企业级功能,例如预防数据丢失的持久化存储、多租户功能、多地域复制,以及加密和安全。本文将着重介绍ApachePulsar中的多租户消息功能。多租户是指通过一个软件实例为多个租户提供服务的能力。租户是指对系统有着相同“视图”的一组用户。作为企业的消息中枢,ApachePulsar自诞生之日起就支持多租户,因为该项目最初就是为了满足Yahoo的严格需求,而当时市面上没有任何可用的开源系统能够提供多租户功能,包括常用的日志抽象系统,例如ApacheKafka。为多个用户或职能部门创建多个Pulsar实例的做法通常是无法接受的,因为这样做会使得用户难以跨越不同部门实时分享数据,造成了隔离。作为一种企业级的消息系统,Pulsar的多租户能力按照设计可满足下列需求:确保严苛的SLA可顺利满足保证不同租户之间的隔离针对资源利用率强制实施配额提供每租户和系统级的安全性确保
读Kafka Consumer源码
最近一直在关注阿里的一个开源项目:OpenMessagingOpenMessaging,whichincludestheestablishmentofindustryguidelinesandmessaging,streamingspecificationstoprovideacommonframeworkforfinance,e-commerce,IoTandbig-dataarea.Thedesignprinciplesarethecloud-oriented,simplicity,flexibility,andlanguageindependentindistributedheterogeneousenvironments.Conformancetothesespecificationswillmakeitpossibletodevelopaheterogeneousmessagingapplicationsacrossallm
日志的艺术(The art of logging)
日志的艺术(Theartoflogging)程序员学习每一门语言都是从打印“helloworld”开始的,日志也是新手程序员学习、调试程序的一大利器。当项目上线之后,也会有各种各样的日志,比如记录用户的行为、服务器的状态、异常情况等等。打印日志似乎是一件很简单、不值得一提的事情。但是,当看到线上项目居然有这样的日志的时候,不禁想问问我们真的会打印日志吗?***********************************ErrorHappened,F*ckUserxxxcannotlogin在我看来,打印日志是一门艺术,而且长期被程序员所忽视,本文尝试回答以下几个问题,分享我对打印日志的一些思考:(1)whyorwhentolog(2)whattolog(3)howtologandtips注意:本文中会用“打印"日志来统一表示日志的输出,但不是我们狭义理解的输出到终端或者stdout、stderr,而是泛指将日志内容输出到任何目标,包括但不限于终端、文件、
18 年技术老兵谈架构师之路及开源项目 AWCP 的发展历程
AWCP是一个共享定制云平台,集成了jflow工作流引擎,并完成了基于钉钉的开发框架自动生成,可快速搭建基于钉钉管理系统。本期【开源访谈】邀请到AWCP项目创始人分享他的架构师之路及开源项目AWCP的发展历程。【本期嘉宾】曹勇,恒拓开源架构师,远光软件架构师,java/c++程序员;jflow项目初创人员之一,awcp项目创始人。拥有15余年技术研发,研发管理经验,积累了丰富的技术管理和架构设计经验;在电子政务领域,企业信息化建设领域、互联网平台建设领域有着丰富的行业经验。深圳市资源交换平台,公文交换平台,政务云平台等系统都是主架构师。目前的主要研究领域包括:NB-IoT,hadoop、kettle,Docker等访谈实录1.首先请做个自我介绍。大家好,我是曹勇,湖南郴州人,在软件行业干了18年,一直从事于信息化系统的建设和基础平台的架构。曾经在远光软件,恒拓开源干过系统架构的工作。在深圳10多年,做了许多与深圳人日常相关的软件架构,例如资源交换,公文交换平台,政务云平台,土地房产交易系统
微服务监控:2018年预测
多年来,我们已经探讨了微服务在实现和部署中所面临的不少挑战。如何监控微服务构建的分布式应用中发生的事情,这是一个贯穿始终的问题。随着复杂性的增加,以及协同(choreographies)理念的日益重要,微服务监控尤为紧迫。例如,早在2017年初我们举办的一次“微服务实践的虚拟研讨会”中,在被问及列出关于微服务前五位要做的和前五位不要做的事项时,研讨会参与嘉宾之一的MartinVerburg说:在构建整个系统之前,先构建3个互相交互的服务原型,找出实现非功能需求的解决方案,比如安全问题、服务发现、健康监控、回压、失效备援,等等。在被问及是否可推荐一些用于微服务开发的特定开发语言或技术时,研讨会参与嘉宾之一的AdamBien说:Java已经诞生20多年了,它是一门成熟的开发语言,具有强大的工具和监控能力。Java在一开始就融入了微服务概念,比如Jini/JXTA框架,它们与No-SQL数据库(比如JavaSpaces)混在一起。可以说,Java超前了15年,那个时候市场还没有做好使用这些技术的准备。不过,从
Egg 2.0.0 正式发布,性能提升 30% 拥抱 Async
阿里企业级Node.js框架Egg已正式发布2.0版本,主要包含以下新特性:基于Koa2.x异步解决方案直接基于AsyncFunction。去除co兼容后堆栈信息更清晰。框架层优化带来30%左右的性能提升,不含Node8带来的提升。平滑升级,保持了对Egg1.x以及generatorfunction的兼容。如何升级:Node.js使用最新的LTS版本(>=8.9.0)。修改package.json中egg的依赖为^2.0.0。检查相关插件是否发布新版本(可选)。重新安装依赖,跑单元测试。Egg为企业级框架和应用而生。团队的架构师和技术负责人可以非常容易地基于自身的技术架构在其基础上扩展出适合自身业务场景的框架。奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。没有约定的团队,沟通成本是非常高的,比如有人会按目录分栈而其他人按目录分功能,开
Spring Cloud微服务架构实践
本文来自于51cto,这篇文章主要介绍我们使用SpringBoot/Cloud一年多的经验总结,从最初的开源软件云收藏来熟悉SpringBoot,到项目中的慢慢使用,再到最后全面拥抱SpringCloud。在使用SpringCloud之前,我们对微服务实践是没有太多的体会和经验的。从最初的开源软件云收藏来熟悉SpringBoot,到项目中的慢慢使用,再到最后全面拥抱SpringCloud。这篇文章给大家介绍我们使用SpringBoot/Cloud一年多的经验总结。在开始之前我们先介绍几个概念,什么是微服务,它的特点是什么?SpringBoot/Cloud都做了那些事情?他们三者之间又有什么关系?什么是微服务微服务的概念源于2014年3月MartinFowler所写的一篇文章“Microservices”。文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中
MySQL绕过WAF实战技巧
*本文作者:blacksunny;本文属FreeBuf原创奖励计划,未经许可禁止转载。一、前言本人喜欢遇到好的东西,乐于分享,关注freebuf有段时间了,写过两篇文章,每次写写文章,不仅仅是为了挣点稿费。而是通过此平台能够认识一些安全圈的小伙伴,互相学习,共同进步。在安全行业也有些曲折,发过工控协议fuzzing的入门教程,也发过无线安全的渗透测试脚本。这次发个web的吧。仅供学习,本人也是小菜。大牛直接飞过吧。二、综述最近在研究web安全,感觉不掌握点绕过技巧,没法混,在看了几天的关于sql注入绕过的方式后,大都是宏观的讲解有哪些绕过方式。简单的总结了下:1、注释方式绕过2、编码方式绕过3、大小写方式绕过4、缓冲区溢出导致拒绝服务从而绕过(fuzz技术)这是目前几天所看到的,有好的思路的小伙伴,可以随时交流。之前建了一个无线电安全研究的群:163309269。欢迎不限于研究无线电、物联网安全的大牛加入。这次主要是看到国外大牛对mysql注入测试的一些思路,然后自己整理下,分享下。对于只看宏观文章,没有实战
简单案例学习Vue.js单元测试
test/unit文件结构及分析├──coverage├──jest.conf.js├──setup.js└──specs├──api-test.spec.js├──click-test.spec.js├──data-test.spec.js├──dom-test.spec.js├──input-test.spec.js├──mock-test.spec.js└──props-test.spec.jscoverage:单元测试覆盖率的报表生成文件(当执行npmrununit后,可在该文件夹下打开index.html文件查看覆盖率)。jest.conf.js:jest的配置文件。Jest是Facebook开发的一个对javascript进行单元测试的工具,之前仅在其内部使用,后开源,并且是在Jasmine测试框架上演变开发而来,使用了我们熟知的expect(value).toBe(other)这种断言格式。setup.js:默认生成的vue配置文件(不用更改,默认开发环境)。specs:编写单元测试的文件
vue-loader 源码解析系列之 selector
constpath=require('path')constparse=require('./parser')constloaderUtils=require('loader-utils')module.exports=function(content){//略constquery=loaderUtils.getOptions(this)||{}//略constparts=parse(content,filename,this.sourceMap,sourceRoot,query.bustCache)letpart=parts[query.type]//略this.callback(null,part.content,part.map)}大家可以看到,selector的代码非常简单,通过parser将.vue解析成对象parts,里面分别有style,script,template。可以根据不同的query,返回对应的部分。很明显那么这个parser完
如何使用 AJAX 和 REST API 创建一个图表(How To Make A Chart Using AJAX & REST API's)
从RESTAPI获取数据是一种很常见的编程模式,使用这些数据来绘制图表同样常见。我们的很多用户可能正在为他们的Web应用程序这么做,所以我想我们(ZingChart)应该写一篇关于如何正确使用的教程。RESTAPI基本上是一个公开的数据集(通常是JSON),它位于某个URL中,并且可以通过HTTP请求以编程方式访问。免责声明,本教程将在一般的JavaScript中运用。我选择了StarWarsRESTAPI作为REST端点,从中获取数据。我之所以选择它,是因为它会返回易于使用的JSON数据,还不需要身份验证。目录如果你不想阅读教程,你可以在这里看到完整的代码(带注释)AJAX请求AJAX是异步JavaScript和XML。Ajax是一组用于异步HTTP请求(GET,POST,PUT,DELETE)的方法。在这种情况下,异步意味着我们不必每次发出HTTP请求就重新加载页面。一个AJAX请求由5个步骤组成:创建一个新的HTTP请求。加载请求。使用
再也不学AJAX了!(三)跨域获取资源 ① - 同源策略
我们之前提到过,AJAX技术使开发者能够专注于互联网中数据的传输,而不再拘泥于数据传输的载体。通过AJAX技术,我们获取数据的方式变得更加灵活,可控和优雅。但是AJAX技术并不是一把万能钥匙,互联网中的数据隐私和数据安全(例如你的银行账号和密码)也非常重要,为了保护某些用户数据的隐私与安全,浏览器使用“同源策略”限制了AJAX技术获取数据的范围和能力。但在一些合理的场景中,我们又不得不想办法绕过同源策略,实现跨域请求资源。因此“跨域技术”一直成为开发者们经久不衰的讨论话题。在“跨域获取资源”这一主题中,我们将围绕“同源策略”和“跨域”两大主题展开,不但讲述它们是什么,更说明了为什么要这么做。相信你在读完该主题下的两篇文章后,一定会对这两大主题有一个清晰,系统的认识。需要提前声明的是,本主题下的文章并不会像众多相同主题的文章一样罗列出所有的跨域技术,而只会捡最主流的四种进行讲解。因为我并不打算写“教你如何跨域”这样类型的文章。让我们开始吧。同源策略整个互联网世界的数据要么存储在服务端(即服务器,如数据库,硬盘
antd源码解读(9)- Form
这个组件貌似比较独特,在官网上面的每一个例子都是使用了Form.create()这个HOC的方法去进行的创建相应的Form组件所以对于表单组件我们主要讲的应该就会是create这个高阶函数Form.create这是一个高阶函数,传入的是react组件,返回一个新的react组件,在函数内部会对传入组件进行改造,添加上一定的方法用于进行一些秘密操作如果有对高阶组件有想要深入的请移步这里,我们这里不做过多的深究。接下来我们直接看这个函数的代码staticcreate=function
css为超过一定宽度的文本内容自动加上省略号
当在html中某个地方添加文本内容的时候如果内容过长我们会希望他超过一定宽度之后,其余的可以被截断,后面补充为省略号;实现方式:1、设置css样式为文本不换行;2、位包裹文本的标签指定宽度;3、设置自动隐藏超出的内容;4、设置超出的文本使用省略号;CSS代码如下:1width:200px;2overflow:hidden;3font-size:large;4white-space:nowrap;5text-overflow:ellipsis;举个栗子: