websocket介绍
websocket应用手动实现的websocket你所见过的websocket你一定见过在网站中,有一个游客聊天的聊天框,比如人人影视。这个聊天框是如何实现即时通讯的呢,就是用到了websocket你可以打开浏览器的network,会看到有个ws://xxxxx,这就代表了是websocket做的那么什么是websocket?websocket就是一套协议。看名字,虽然有个websocket,但他和http协议一样,也要走socket。不同的是:http是短连接,处理完一个请求就断开;websocket是连上就不断开,一直不断开,属于双工通道,服务端可以主动给客户端推送消息,客户端也可以主动给服务端推送消息当某一个客户端发送一条消息,服务端接收以后,再推送给所有的客户端,所以才会呈现出所有人都在即时通讯的效果服务端当然就是我们写的程序了,那客户端是浏览器,所以还需要浏览器支持才行。不要以为浏览器是都支持的,如果所有人都用chrome,前端开发工程师估计就没什么工作了。还有,如果所有的浏览器都支持,腾讯的webQQ,
基于 HTML5 Canvas 的 3D 模型贴图问题
之前注意到的一个例子,但是一直没有沉下心来看这个例子到底有什么优点,总觉得就是一个list列表,也不知道右边的3d场景放两个节点是要干嘛,今天突然想起来就仔细地看了一下这个例子的代码,实际操作中应该还是有用处的,就跟大家分享一下。本例地址:http://hightopo.com/guide/guide/core/listview/examples/example_custom.html实现图如下,看起来略有点简陋,但是可以自己天马心空增加或者更改成你需要的东西:首先,创建场景,HT中有一个BorderPane面板组件是拿来页面排布的,可以排布html标签,也可以排布HT的组件,这里我们将整个页面分为三个部分,顶部工具条toolbar、左侧列表listView和中间3d场景g3d,再将这个面板组件添加进htmlbody体中:borderPane=newht.widget.BorderPane();//面板组件toolbar=newht.widget.Toolbar();//
Asp.Net MVC 缓存
Web应用缓存技术大体上可以分为两类:服务端缓存和客户端缓存。两种目标都是减少重复性内容的生成和网络传输工作,因为缓存数据存储的位置不同,而分为服务端缓存和客户端缓存。服务端缓存服务端缓存技术关注于服务端数据查询,生成或者操作技术。主要就是减少处理请求的工作量,减少数据库查询次数和生成HTML数据的CPU周期--减少每个bit的数据。对于服务端缓存来说,不管是刷新页面,重新输入地址,还是Control+F5都不会规避缓存,如果缓存数据有效,一定是请求的缓存数据。输出缓存(OutputCache)输出缓存是Asp.Net下最常用的缓存机制。输出缓存,缓存服务端生成的HTML数据--缓存Action下返回数据(Html/Json)。这样,在每次调用相同的Action时,就不需要再次执行Action方法。缓存位置(Location)OutputCache使缓存的内容一般放在三个位置上:服务端,代理服务器,浏览器客户端。通过Loaction属性可以设置缓存的位置。Loaction属性有如下值:AnyClientDownstrea
c#统计代码行数
小编,已经快学了两年编程了。昨天突发奇想,想统计下这些年到底写过多少行代码,于是做了一个这个小程序来统计代码行数。老规矩,先上图。比较惭愧,写了两年只有2万多行。那我们还是进入下一项吧。界面搭建我也不说了,我就讲一下思路和核心代码,最后附上源代码。Life_Programmer、Serch_Files。思路:我们点击刷新按钮,他会弹出一个小窗口让我们选择要搜索的区域。这个原理在我的C#游戏进程杀手的随笔讲过了,这里就不赘述了。关于这个搜索小窗口,我觉得适用范围很广,我是把它做成了一个.dll文件引入到我们这个主程序的。这个小窗口我也会附上源码在本篇随笔。那我们这次主要讲讲和上一次不一样的地方。既然我们把它这个小窗口封装起来了,那么我们就要给予它最大的灵活性。目的:让它搜索出我们想要的东西。那么达成这个目的,我们需要明确两点:1)要搜索文件的名字。(或者说要搜索的字段)2)要搜索文件的类型。(文件名,还是后缀名)所以为了完成这两点,我们需要将将要搜索的字段封装在这个小窗体里,设置一个属性对外提供访问接
vuex 表单之痛
最近一个小项目使用vuejs技术栈-vue+vuex+vue-router+element-ui。在做表单的时候遇到一个小问题。这个表单用于更新用户信息,原信息来自于vuex,注入到computed中computed:mapState({user:state=>state.users[id]})vuex使用严格模式,这意味着不能直接修改user,否则会报错。我选择深度克隆一个user对象。直接使用解构对象{...user}无法兼容属性值为对象的对象,所以弃用。import_from'lodash'computed:mapState({user:state=>{return_.cloneDeep(state.users[id])}})保存验证。select选择另一个选项,组件中user会被修改,vuex中的user不会被修改,但是组件视图无法被更新。和同事讨论了一会,有了下面的猜测:如果视图可以被更新,即compone
关于vue、vuex的一些初步小结
一、Vue组件的创建一般语法:Vue.component(tagName,options)务必在根组件实例化之前注册组件组件options说明:data:必须是一个函数,目的在于返回独立的对象,保证组件之间的数据不互相影响components:局部注册一个组件,仅在当前组件作用域内可用props:用于父组件向子组件传递数据时使用,可传静态属性,也可传动态的(数据绑定,父组件数据变化引起子组件数据相应变化),一次性传递所有属性可采用v-bind指令computed:计算属性,在部分情况下可以代替watch的功能,也可用于:class的动态绑定watch:即属性侦听器,接受参数newData,oldData,含义顾名思义methods:定义组件内的方法生命周期函数:beforeCreate,created,beforeMount,mounted,updated,beforeDestroy,destroyed,其具体含义可参照官方文档二、组件间数据传递来看看文档里一段值得参考的语法(位置:组件
Vue2.0二——模板语法、计算属性、watch、filter、过渡、directive、keep-alive
一、模板语法a.数据绑定:{{message}}插值表达式v-once以后值不变v-bind:属性v-bind:id="root"=>:id="root"v-html='message'b.表达式{{number+1}}{{ok?'YES':'NO'}}{{message.split('').reverse().join('')}}<divv-bind:id="'list-'+id"></div>c.class<divv-bind:class="{active:isActive}"></div>对象<divclass="static"v-bind:class="{active:isActive,'text-danger':hasError}"></div>数组<divv-bind:class="[activeClass,errorClass]"></div
vue props双向绑定
使用Prop传递数据组件实例的作用域是孤立的。这就表明不能在子组件的模板内直接引用父组件的原始数据。父组件的数据需要通过prop下发到子组件中才能使用。Prop是单向绑定的:当父组件的属性变化时,将传导给子组件,但是反过来不会传递。这是为了防止子组件无意间修改了父组件的状态。特殊情况比如弹窗,点击子组件外部的按钮可以控制子组件显示与隐藏,点击子组件内部也可以控制子组件隐藏,此时需要属性共享解决父组件<divid="app"><table><tr><thcolspan="3"@click="show">父组件数据</td></tr><tr><td>name</td><td>{{name}}</td><td><
Vue2.0三——Vue-router
我会从两个方面来写路由自定义路由(以拉勾网为例)路由指的是在不刷新页面的情况下更新页面通过:#hash,例如:10.0.164.8:8080/index.html/#main然后通过H5的history对象的history.pushState()+popState事件实现路由切换实现步骤:(1)在script文件下创建路由表routes.jsexportdefault{'/':'Position'首页'/search':'Search','/mine':'Mine'}(2)在app.js中匹配路径importroutesform'./routes'//动态获取组件newVue({el:'#root',data:{//定义当前路径信息currentRoute:window.location.pathname},computed:{//生成子路由组件ViewCom
Vue2.0四——组件传参
路由配好了再传个参呗注:组件信息流转的时候只能单向1>父子传参传参:通过属性prop:传递数据a.父组件传参给子组件子组件:<ul><liv-for="itemindataList"></li></ul>exportdefault{prop:{//prop接收传过来的参数dataList:{type:Array,required:true//校验}},data(){return{dataList:this.dataList}}}父组件<Positio
Vue2.0五——props和slot
propsprops是用来接收参数的例如父组件向子组件传参可以放在props中slotslot:插槽slot分发模式主要用于在组件中插入标签或者组件之间的相互嵌套个人认为如果组件中有需要单独定义的地方可以使用slot单个slot内容分发可以选择用slot标签事先占个位置例子:现在父组件中占个位置<templateid="a"><div>hello!</div><slot>没有内容就显示这个</slot></template>vara=Vue.extend({template:'#a'})子:<divid="child"><A></A><hr/><A><h1>内容1</h1><h1>内容2</h1><
为凉风青叶做的简历生成工具
Github:https://github.com/luyilin/AobaDemo:https://luyilin.github.io/Aoba/
Vue2.0六——Vuex
Vuex概念Vuex其实就是专门为vue设计的集中式状态管理架构,也就是说项目中共享的一些数据应用及的数据放在store中;改变数据的方式是提交mutations,这是个同步的事物,异步逻辑应该封装在action中数据流:前端通过action将传过来的数据进行处理或直接得到数据,然后通过mutation把处理后的数据存放到数据库state中,谁要用就要通过getter从数据库state中取Vuex的五种属性State、Mutation、Action、Getter、Modulestate的特性一、Vuex就是一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于与一般Vue对象里面的data二、state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新三、它通过mapState把全局的state和getters映射到当前组件的computed计算属性中mutation的特性mutations与
Vue2.0七——生命周期
vue2.0新增的什么是vue的生命周期指的是实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。生命周期的作用生命周期中有多个钩子函数,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。总共有八个阶段也就是八个钩子函数创建前/后,载入前/后,更新前/后,销毁前/销毁后页面第一次加载的时候会触发beforeCreate,created,beforeMount,mounted这几个钩子,DOM渲染在mounted中就完成每个周期的具体场景1、beforeCreate在实例初始化之后,数据观测(dataobserver)和event/watcher事件配置之前被调用。2、created实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(dataobserver),属性和方法的运算,watch/event事件回调。然而,挂载
【原创精品】程序员最强大的利器——电子笔记本的思考(1)(ver0.3)
【原创精品】程序员最强大的利器,本文以下内容全都是作者EverStenis(胡佳吉)的原创,未经授权不得转载,抄袭必究。我想问大家一个问题,对于我们程序员来说,在我们的武器工具库中,最强大的一件利器是什么?答案是:电子笔记本(也就是,云笔记)。学会如何高效使用这件工具,可以让我们编程效率以及做事规划事半功倍!陶哲轩在《解题·成长·快乐——陶哲轩教你学数学》中着重强调,用纸笔来“缓存”思维对于数学解题的重要性:用选定的符号表达你所知道的信息,并画一个示意图。把所有信息写在纸上,有三点好处:a)解题时,便于思考;b)陷入困境时,可以盯着纸进行思考;c)把知道的写下来,这个过程本身可以激发新的灵感和联想。但请注意,不要写下过多的信息和细节。一种折中的办法是着重强调那些你认为最有用的事实,而把那些令人怀疑的、冗杂的或异想天开的想法写在另一张草稿纸上。同样地,刘未鹏在他的《暗时间》里更是用了多个章节(例如,章节“书写是为了更好的思考”、章节“跟波利亚学解题”等),全面阐述了将自己的思维过程详细地写下来的各种好处。以上的作者们都是强
《程序员》12月精彩内容:双11技术决战
双十一酣战方休,双十二蓄势以待,街谈巷议的都是一个话题“今天,你买了吗?”席卷购物车的狂欢之下,是对系统架构的巨大挑战,如何在兼顾用户体验的同时保证系统的灵活敏捷都对电商架构提出了自己的要求。乘着这股高热度的东风,本专题将带你一看阿里双11的9年技术演进之路、苏宁库存架构转变和唯品会双11大促技术保障实践。双11,阿里技术的一次大检阅容器篇|十分钟万台服务器部署,探秘阿里双十一弹性扩容背后的技术(阿里云容器服务团队)人工智能篇|拍立淘中的图像搜索和识别(潘攀,阿里巴巴iDST视觉技术资深算法专家)不再谷满谷,坑满坑,看苏宁库存架构转变(司孝波,苏宁易购核心交易部门技术总监)唯品会双11大促技术保障实践(京京,张广平)资讯CSDN要闻Cambits:可重新配置的相机系统把“随你付”定价模式用于公开获取出版为何要争取维修电子产品的权利PowerPoint不可思议的起源AI是否只会独门绝技?人工智能如何成为一名自然语言处理工程师(兰红云,滴滴算法工程师)自然语言处理和大部分的机器学习或者人工智能领域的技术一样,是一个涉及到多个技
学4个月训练出的码农和读四年相关专业大学生区别在哪里?
如果2个月可以训练出一名合格的码农,那么相关专业出来的大学生,4年书岂不是白读了?源自知乎作者:徐炼我大学学飞行的时候,学制叫4加1,就是学四年的飞行理论和基础,然后再正式上飞机学一年飞行。在我之前的学长,学的学制叫2.5加1.5。就是两年的理论,2年的飞行训练。后来又出了一个一年学制的,就是招收地方大学生入伍。学半年理论和基础,直接上飞机学飞行训练。再往前推六十几年,建国之初,一群初中文化都没有的陆军战士们,学了几个月的理论,再学了几个月的飞行训练。不到两年的时间里,就开着飞机上天和世界第一的美国空军拼杀了。听起来很夸张吧?但是教飞行的老师傅会告诉你,熬过前几十小时的训练,你就是一名飞行员了。因为真正核心关键的东西,就在这几十小时里。其他东西是围绕着这几十小时展开的。你说学飞行要懂气象,要懂英语,要懂空气动力学和飞机构造原理,没错。可是为什么这么多又懂气象又懂英语,飞机理论精通的人,最后被淘汰了,最后学不会飞行?因为主次不分,他们没有掌握这几十小时的内容,增分项学得再多又如何?我作为一个转行成功的人,一
程序员的幽默,不是一个bug就能解释清楚的
程序员:在设计软件前你需要把你的需求告诉我们。客户:我想要一个软件。程序员:我的意思是你想让这个软件做什么。客户:如果你不告诉我他能做什么我怎么知道他能做什么。程序员:……客户:那你做一个软件让他告诉我需求是什么。如果你身边有一个程序员朋友,你怎么用有限的时间和他搞好关系,如何夸程序员呢?通用版本:你这个代码写的真好看!C程序员版本:你这个代码我不用看注释都能看懂,写的真好!Ruby程序员版本:哇!这个太神奇了!你是怎么做到这个的!Perl程序员版本:哇!这个正则表达式太厉害了!Python程序员版本:Pythonic!JAVA程序员版本:哇!你这个JAVA程序写的一点都不像JAVA!分享之后我还是要推荐下我自己的前端学习群:547931294,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新的前端资料和零基础入门教程,送给大家,欢迎初学和进阶中的小伙伴。听说有一个外国人,从小立志想要当一个出名的作家,想让自己写的东西在所有人看到都会十分暴怒,暴跳如雷,
ITeye新闻热点月刊:2017年11月总第117期发布了!
ITeye新闻热点月刊总第117期(2017年11月版)发布了!制作精美,内容丰富,为您总结一个月最精彩的技术新闻。【点击下载ITeye2017年11月新闻热点月刊】>>精彩内容推荐:如何快速入门网络基础知识(TCP/IP和HTTP)本文带你认识和了解计算机网络一些经典专业术语、应用层协议,通过实际生产环境下的例子,了解网络优化在项目中的实际意义以及带来的效果。我的架构感悟:从美国宪法学习架构设计原则复杂系统的长期平稳运行,需要优秀的架构支撑;设计一个复杂的系统架构,是超高难度的工作;作为IT软件系统的架构师,了解一些其他系统的架构(及其设计过程),也会很有价值。【点击下载ITeye2017年11月新闻热点月刊】【查看所有ITeye新闻热点月刊】
理论篇:关注点分离(Separation of concerns, SoC)
业务逻辑的代码中不再含有针对特定领域问题代码的调用(将针对特定领域问题代码抽象化成较少的程式码,例如将代码封装成function或是class),业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好的管理起来。具体说明(概念比较难理解)好的架构设计必须把变化点错落有致地封装到软件系统的不同部分。要做到这一点,必须进行关注点分离。好的架构必须使每个关注点相互分离,也就是说系统中的一个部分发生了变化,不会影响其他部分。即使需要改变,也能够清晰地识别出那些部分需要改变。如果需要扩展架构,影响将会最小化,已经可以工作的每个部分都将继续工作。上述论述中的四句话总结:“系统中的一个部分发生了变化,不会影响其他部分。”“即使需要改变,也能够清晰地识别出那些部分需要改变。”“如果需要扩展架构,将影响最小化,已经可以工作的每个部分都将继续工作。”结论:关注点分离原则不仅体现在问题求解、算法设计、软件设计等设计方法中,同时也体现在软件开发过程、软件项目管理以及软件开发方法学等诸多方。在某种意义上,正是对