杂谈沟通

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/li12412414/article/details/79953369

前言

老大一直给我强调沟通和规划的重要性。其实,我先前在blog写过一篇与沟通有关的文章。但是,因为我把文章用在了学院布置的读书报告。为了避免查重,所以,我将那张文章暂时下架了。沟通的重要性也是不言而喻的。差劲的沟通可以用对牛弹琴来形容。好了,闲话不多说。

沟通的定义

沟通的定义:为了实现预定的目标,把信息,思想和情感在个人或者群体间传递,并且最终达成结果的过程。这是从百度百科中抄的。其实,仔细阅读,斟酌一下,就可以体会到其中的涵义了。

那么在沟通的时候,我们需要明白以下的俩点:

(1)沟通需要明确沟通目的

 (2)沟通最后要达成共同的协议。沟通的结果,最好以书面的形式记录下来并且发送给相关人员。 

沟通注意事项

  • 反馈;沟通必须要及时的反馈。反馈是一个优先级十分高的事情,就好像你饿了就要迫不及待的想要吃饭一样。收到信息,给人家一个回复,那么你就会给别人留下一个好的印象,别人会觉得你是一个靠谱的人。这样,可以吸引女孩子呢。其实,除了在工作中要及时的反馈外,我们平时的沟通,比如在微信中的沟通。如果别人@了你,那么铁定是想你回答这个问题。但是你一声不吭的。这种情况如果一而再,再而三,三而五,五而七的发生,别人会慢慢的远离你。我遇到过这种同学。其实,只要站在对方的角度上思考问题,将心比心,这个及时反馈的问题就可以轻而易举的解决了。
  • 沟通的时候应该持有一个正确的态度。正确的态度,良好的态度是一个高效,良好沟通的开始。比如说,持有宽容的态度,一定不要紧张,注意聆听,及时反馈,但是绝不能一味的屈从。我们必须端正我们的态度:我们是来沟通的,不是来领取命令的。比如说,在评审需求的时候,产品经理如果提出了一些不合理的需求,我们应该给产品经理指出来。
  • 对于沟通产生的结果,要全力以赴,要诚信。对于沟通的结果,我们要诚信。答应了什么时候做到的就要做到。如果你评估自己的情况在那个时候做不到,那么就不要心直口快答应别人。当然,每个人可能都会有认知偏差,如果答应了别人,但是在过程中,发现自己不能够按照预定的时间完成,那么就需要及时的反馈,告诉别人,这样下来,我们得到的不至于是一个最差的结果。
  • 尊重。沟通的时候需要尊重别人。如果你不尊重对方,那么沟通往往是事倍功半的,吃力不讨好。你想要别人怎么样对待你,你就应该怎么样去对待别人。尊重是互相的。

激励

要形成良好的沟通能力,必须要付出功夫。良好沟通能力的形成并不是一蹴而就的。正所谓“冰冻三尺,非一日之寒”。周星驰在荧幕上是一个十分搞笑的人物,但是在实实在在的生活当中,星爷并不是一个十分擅于交谈的人。所以,从中可以窥知,星爷也是经过全力以赴的不断的努力,才成为一个搞笑的演员的。正所谓“台上一分钟,台下十年功”。对于自己这种沟通能力有缺陷的人来说,更需要持续不断的努力。

致谢

张彦老大,黄丹燕同学,董董娇同学。不过,我估计他们没有机会看到这个blog.哈哈哈哈哈



Javascript杂谈 (Java杂谈续)

06-09

[color=#0000FF] 最近看到论坛里有很多朋友问Js的相关问题,其实小弟也早就想好好总结一下Javascript这门语言了,最近忙着准备毕业答辩,趁着端午假期,可以有空闲时间静下心来总结自己所学,希望能分享给各位!自从在Java基础版面完成了10多篇的《Java杂谈》连载以来,得到论坛里很多朋友的支持和鼓励,包括一些前辈的肯定。时隔大概半年,又再次提笔开始些学习笔记,笔者一定更加努力严谨,希望大家能共同提高! rnrn 废话少说,开始进入Js的世界吧(按照老习惯,以问题形式展开): rn (一)Js是什么? rn 一种误解是Javascript跟Java有渊源。其实很多书上也提到了Js的历史,笔者简单说一下。Javascript最早是由网景公司开发的一种脚本语言,其语法源头大部分是借鉴另外一门脚本语言Perl,早期的名称是Livescript, 跟Java完全不相关。最后改成Javascript并一致流行到现在完全是网景公司(Netscape跟Sun公司的一种行销策略)。现在的Js官方名称应该叫ECMAScript,ECMA代表欧洲计算机制造商协会,它对Js进行标准化制定,标准的实现包括浏览器对Js的解释。区别Js和Java是学好它的前提(尽管Js和Perl等脚本语言也逐渐推出了模拟面向对象的实现方式,本质上来说还是过程化的脚本语言)。 rnrn (二) Js的特点? rn 既然是脚本语言,也就是说类似Html这种标记性语言一样,Js的执行其实不需要经过编译的过程,各种厂商的浏览器内置Js解释器能对Js进行正确解析,很显然我们能推理出的信息就是Js的解释执行应该是按照从上到下的顺序来进行的。写一些例子要运行不要任何开发工具,记事本写完丢进浏览器就可以被执行。当然,浏览器内置解释Js的调适和报错机制因厂商而异,特别是浏览器底Js执行的报错不如人意,甚至很多时候都无法准确给出错误出现在哪一行,使得Js程序员在初学经验尚浅的时候饱受折磨(笔者深有体会)。 rnrn 先来看看Js的语法特点吧: rn Js程序是用Unicode字符集编写的,也就是说16位的Unicode编码可以标识地球上通用的每一种书面语言。这事国际化的一个重要特征,在Web开发需要国际化的时候作用相当大。(这里指ECMAScript标准化之后的Js版本1.5)。 rnrn Html不支持大小写,Js对大小写敏感,另外Js是一种松散的弱类型语言,比如语句放在不同的行上没有分号也不会报错,大家都可以联想一下常用编程语言在编译时候IDE的编译器会提示的错误在Js中通通不会出现,这样就大概都能猜到编写Js代码的时候有哪些必须注意的地方了。 rnrn 弱类型的意思是Js中的变量没有类型之分,声明不声明都不会有错,若声明则统一用var关键字即可。Js支持的类型包括数字、文本字符串、布尔值、null、undefined、Object、Function。其中复合对象Object本质上包括两种,一种是对命名变量值的无序集合(稍后见示例),另外一种是有序集合(即大家所熟悉的数组),顺便提一下,Js对数组实现原理是栈存储,所以Js的数组才会有内置的push()和pop()方法。Js语言内定义的专用对象包括Date、RegExp(正则表达式)、Array、Error、Math、String、Number等。 rnrn Js数字格式允许的精度范围是正负2的53次方,但某些运算的数字范围只支持正负2的31次方。Js的字符串支持单引号或者双引号的括起来的Unicode字符序列,在数字环境中,解释器会自动将字符串转换成数字,我们只要把一个字符串减去0就可以将其转换成一个数字(转换规则相对比较严格,数字前后不能带空格等)。Js的解释器在遇到bool类型的变量时候也会根据使用环境自动完成转换,例如数字环境中true就转换为数字1,false就转换为0,字符串环境中就会转换为true或false串。 rnrn Js的函数非常特殊,因为它被当作一个变量来处理,可以被赋值传递,存储在变量中。总是说理论,这里举一个非常实用体现Js函数做为变量来处理的例子吧,现在我们需要在浏览器加载页面之后调用一系列函数来完成业务逻辑。然后Html页面只有一个onload函数可以重写赋值,怎么实现一个onload调用多个自定义函数呢: rnrn[code=JScript]rnfunction addLoadEvent(func)rn var oldOnload = window.onload;rn if(typeof window.onload != 'function')rn window.onload = func;rn elsern window.onload = function()rn oldOnload();rn func();rn rn rnrn[/code]rnrn ——我们先把window.onload函数保存在变量oldOnload中,之后再判断window的onload函数是否是函数类型,针对第一次加载之前onload为空的情况,如果不是函数类型则将onload函数第一次赋值为func参数存储的函数;如果onload已经是函数类型了,则先调用原oldOnload变量中存储的onload函数,之后再紧接着执行传递进来的func函数。 由此我们可以看到一个调用队列构成,如果我们需要在页面加载时候按次序调用A()、B()、C()三个函数只需要加三行代码: rn addLoadEvent(A); rn addLoadEvent(B); rn addLoadEvent(C); rnrn 从这个例子我们可以体会到Js函数的灵活,毕竟是不需要通过编译直接被解释的语言,熟悉了浏览器解析Js的规律之后才能实用Js强大的功能。所以Js就是一把双刃剑,有人说它简单,其实它的链式调用结构可以很高效的完成一些算法,不需要遵循繁琐的语法规则(适配编译器),功能十分强大;然而眼下的Web开发现状是大多数人不遵循合理的规范去写Js,使得页面Js代码乱而且不易维护,大家都因Js语言松散而养成了写Js习惯也松散的坏毛病。说到底还是一个程序员的基本素质问题,编写良好风格的代码,不管使用什么语言都是应该遵守的规则。 rnrn 继续介绍Js语言的其它特点吧,Js中声明了变量未赋值的会默认为null,而调用未声明的变量返回的值应该是undefined,虽然undefined和null值不同,但==运算却将两者看作相等。Js中的传值和传址基本规则是:基本数据类型通过传值来操作,而引用类型传址。比较特殊的是字符串在Js中被当作基本类型传值来操作,比较字符串可以用基本类型操作符==来完成,但有一种情况例外,就是两个都使用了new关键字的String对象比较是比较地址,其它情况都是比较值: rnrn[code=JScript]rn var s1 = new String(“hello”);rn var s2 = new String(“hello”);rn var s3 = “hello”;rn alert(s1==s2); //return falsern alert(s1==s3); //return truern[/code]rnrnrnrn 前文提到了,一些在其它语言的编译错误操作在Js中有着不会出错的解释方式,因为Js不需要编译直接解释执行。例如重复声明变量在Js中完成的只不过是一次赋值操作而已;未声明(没有var)的变量会自动隐式创建为全局变量, 即使在在一个函数体内使用。这里就出现了一种坏习惯造成的问题,如果在函数内不声明变量直接使用,一旦全局有一个同名变量,程序员误认为这只是局部变量,实际全局变量会被修改。 rnrn Js语法中有一个容易被忽略的地方就是并没有块级别作用域,只存在全局和局部两种作用而已。这也是Js函数的特殊性相关的,在函数内部无论几层嵌套括号,局部变量在整个函数中都是有定义的(注意是整个函数中),下面这个例子可以给出有力的证明: rnrn[code=JScript]rn var ss = “global”;rn function tt()rn alert(ss);rn var ss = “local”;rn alert(ss);rn rn[/code]rnrn ——由于局部变量ss的定义占据整个函数,所以第一次输出是undefined,不会是全局的global。这里顺便提到一个在Js中很强大却难以理解的功能就是闭包,什么是Js中的闭包呢?先了解一下Js作用域链(又称调用链)的概念:每个Js执行环境都有一个和它关联在一起的作用域链,这个作用域链是一个对象列表或者对象链,当Js需要解析变量x的值时,就开始查找该链的第一个对象,以此类推找下去。例如在一个不含嵌套的函数体中作用域链就有两个对象构成,一个函数调用对象,另外一个是全局对象,引用变量首先查找调用对象再是全局对象。 rnrn Js中的函数是通过词法来划分作用域的,这意味着函数是在定义它们的作用域里运行,而不是执行它们的作用域里运行,当定义了函数,当前的作用域链就保存起来,并成为函数内部状态的一部分(除了顶层作用域链仅由全局对象组成,跟词法没关系)。那么,当定义一个嵌套的函数时,作用域链就包括了外围函数,在这个嵌套函数里,可以访问外围函数中定义的所有变量(参照刚讲完的局部变量原则)。虽然作用域链已经形成,但其链上调用点的属性值是可以更改的,当嵌套函数的引用保存到一个全局作用域中,即使函数被调用返回退出了,函数的局部变量名字和值都依然存在,这就形成了一个闭包(将要执行的代码以及执行这些代码的作用域构成一个综合体)。可能理解闭包对大多数人比较困难,需要弄清楚词法分析等概念,但其实用起来很清楚简单,我们来看一个例子吧: rnrn[code=JScript]rnfunction f(s) //传递参数srn var x = "local"; //局部变量xrn function g() //嵌套函数rn alert(x);rn alert(s);rn rn return g; //返回嵌套函数引用rnrnrnvar global = f("hello"); //对全局变量global赋值rnglobal(); //调用全局函数变量,以此弹出”local”和”hello”rnrn[/code]rnrnrn ——这个例子说明,即使函数f已经执行完毕,但由于闭包形成,f的局部变量和参数值在定义f(即使浏览器解释前5行)的时候就已经定义在调用链上了,然而随嵌套函数引用g的返回而挂在了全局调用链上,所以通过闭包连接依然可以找到已经执行退出的函数的局部变量和参数值。这就是所谓的闭包! rnrn 闭包是一种有趣又强大的技术,我们并不是一定要用它做什么,但真正理解它可以帮助我们学习到Js的精髓。 rnrn 最后介绍一下Js的面向对象模拟特性吧,虽然不是真正的面向对象。Js中每个对象都有一个constructor属性,它引用了初始化这个对象的构造函数,有助于确定一个对象的类型。Js中的instanceof运算符本质就是检查constructor属性值。所有的函数都有一个prototype属性,当这个函数被定义的时候,prototype属性自动创建和初始化,初始化值是一个对象,只带有一个属性,名为constructor,指回到和原型相关联的那个构造函数上。强调一点:Js没有真正的类,只有通过构造函数和原型函数实现的伪类而已。看个例子: rnrn[code=JScript]rnfunction Person(name, age)rn this.name = name;rn this.age = age;rnrnrnPerson.prototype.display = function() return this.name+”,”+this.age;rn[/code]rnrn ——定义了一个Person类,Js中this关键字代表函数调用对象(还记得刚说完的函数调用链么),正因如此,每次调用this值都会不同,所以模拟出了类成员变量的效果。而prototype代表函数的constructor属性,不因调用对象而改变,但可以通过this关键字引用调用对象,实现了静态方法的效果。那么面向对象的封装即私有变量又怎么实现呢?答案自然是闭包! rnrn[code=JScript]rnfunction Person(name, age)rn this.getName = function()return name;rn this.getAge = function() return age;rnrn[/code]rnrn ——还记得刚讲过的闭包么?即使在函数调用退出之后,函数参数name和age也会保留在函数返回值的作用域中能被访问到,这个返回值就是所谓构造函数返回的新建对象,而保留下来的参数值就是这个新建对象的私有变量。只能通过getName和getAge才能在调用链上找到闭包形成的name和age值。 rnrn (三) Js实用经验? rn Js的语法还有许多细节是可以推敲和研究的,这里就不罗唆了。笔者向来只喜欢讲关键本质核心或者实用的东西。最后一部分简单介绍一点Js的实用性吧。毕竟很多时候我们不是用Javascript去处理数据或者编写算法,大多时候是用来操作浏览器中的DOM对象,从而改变网页中的元素属性和内容,达到动态Html的效果。所以实践Js主要还是用来操作网页元素,之前所举的window 的onload函数就是个不错的例子。 rnrn 我们经常要使用很多次document.getElementById来获取页面元素值,写多了之后不免有些罗唆,Js变量的命名规则中允许室友$符来做为变量名字,DWR、prototype等框架中就使用$(‘id’)来代替document.getElementById(‘id’)这一长串字母,其实实现起来也是非常简单的(严谨的写法): rnrn[code=JScript]rnfunction $() rn var elements = new Array(); rn for (var i = 0; i < arguments.length; i++) rn var element = arguments[i]; rn if (typeof element == 'string') rn element = document.getElementById(element); rn if (arguments.length == 1) rn return element; rn elements.push(element); rn rn return elements; rnrn[/code]rnrn 最后我想分享一些Js编程的感想,很多次被莫明其妙的Js错误搞得晕头转向的时候,其实笔者还是感叹计算机就是笨,永远只会按照固定的模型去做事情。牢骚两句,真正想说的是一旦发现浏览器警告的Js那一行没有明显的错误,很可能是由于从前向后解析Js代码时存在一些语法或者词法错误,只要想想Js的函数支持的是词法作用域,在定义的时候就要创建并初始化作用域链的,而浏览器的检错没那么智能,需要我们尽量熟悉Js的松散和词法分析方式才能很快的准确定位到错误所在并写出高质量的Js代码来。更多稀奇古怪的错误最后发现其实就是类似function后面没有括号、嵌套之后少一个右括号、引号用的中文引号之类的傻瓜错误,希望各位碰到的时候也能耐心的去寻找,同时注意规范的编程风格。[/color]

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试