第一篇:Oracle9i&10g编程艺术读后感
《Oracle9i&10g编程艺术--深入数据库体系结构》即为《Expert one to one oracle》的升级版本,不过升级后可能会变为三本书,这本书强调的是深入数据库体系结构的讲解,本书的作者Thomas Kyte(即Tom)无疑是Oracle界最为知名的人物,而这本书可以说基本是专为开发人员而写的,因为我个人觉得书中讲的东西大部分DBA都是懂的,但对于开发人员来讲估计大部分都不懂,Thomas Kyte抓住了怎么给开发人员讲才能讲清的方法,对于书中的每项内容Thomas会讲解什么时候这么做、为什么要这么做、什么时候不能这么做以及为什么不这么做,要说服开发人员,很多时候除了告诉怎么做以外,还必须得告诉为什么要这么做,否则很难说服,而Tom在书中则很好的做到了这点,Tom会告诉你Oracle是怎么去实现的,所以你要这么做或者不能这么做,这本书除了让我学习到了更多的Oracle知识外,还让我更加明白了数据库在系统中的重要性以及充分发挥数据库的功能是多么重要的一件事,还有一个附加的好处就是让我们可以窥探到部分Oracle的设计,对于自己实现应用系统也是会找到一些可参考的地方,这本书写的实在是太好了,强烈推荐给开发人员看。
按照书中所讲的东西,个人觉得开发人员对于数据库应了解如下内容:
1、读一致性
Oracle在读数据时采用的是保证数据一致的方法,也就是说查询出的所有数据均为发起查询时的数据,Oracle这么做的主要原因是为了避免读阻塞写,这么设计的目的是为了支持高并发,而其他的数据库有些不是这么做的,就像在sql server中需要明确的在查询语句中加上with nolock才会避免读阻塞写。
以一个这样的例子来说明下oracle的读一致性:
假设现在有一张账户表,来看看同时进行的一个转账动作和查询动作:
查询动作:查询所有账户的money的总数;
转账动作:从A账户转400到B账户。
查询到A账户的money为:600
更新A账户的钱为200
查询到C账户的money为:100
更新B账户的钱为500+400提交。
此时查询才查询到B账户,那么
这个时候查询到的B账户的money到底是500还是900呢?
按照oracle的读一致性非常明显这个时候查询到的B账户的money会是500,这就是读一致性的概念,在其他的读会阻塞写的数据库中确实不会出现这样的疑问(因为转账的动作得等到查询动作结束后才能执行),但那样的方式很大程度降低了数据库的可并发性,在后面的redo&undo中会讲讲oracle的这种读一致性是怎么实现的。
2、锁机制
Oracle主要有行级锁和表级锁,大多数情况下Oracle都只会出现行级锁,很少会出现表级锁,所以在oracle中出现死锁的现象还是非常少的,开发人员在设计系统时应尽量避免等待行锁的现象,也就是避免多人共同修改同一行,只要解决了这种现象,其实也就意味着Oracle支持高并发是完全没有任何问题的,关于锁定机制最容易出现的问题就是丢失更新这个问题了。
3、丢失更新
丢失更新的实际例子就是:A、B均已读出数据并开始进行修改,当A提交数据后,B再提交就出现了B覆盖掉A修改的内容的情况。
丢失更新的解决方法通常都是采用版本列、时间戳列这样的方法来实现,不过只有在多并发共同修改同一行的系统中才需要慎重的考虑这个问题。
4、索引
索引无疑是数据库中非常重要的机制,尽管这个更多的可以交给DBA来进行调优设计,不过开发人员还是要大概的有所了解,至少要知道索引有哪几种(B树索引、函数索引、bitmap索引、聚簇索引、对部分行建索引等),什么场合下适合用哪种索引。
Tom在书中强调了很多次,没有“fast=true”这种银弹式的提速开关,只能是根据实际情况来分析,也就是说不是说只要加了索引性能就会提升的,索引主要是为了查询大表中的少量数据的,Tom在书中讲解了索引的查找数据的方法(索引中映射到的为rowid,在查找到索引后查找数据时oracle是根据每个rowid去表存储的块中读取的),按照其查找数据的方法完全有可能出现查找索引比全表扫描还慢的现象,举例来说明下:
假设一张表有100,000行记录,现在我们要读取其中的20,000行,假设每行的大小约为80字节,数据库的块大小为8k,在这种情况下表中的记录大约会产生1000个块,那么这个时候使用索引读取的话就要做20,000次Table access by rowid,而整个表都只有1000个块,也就是说即使全表扫描也只需要做1000次的动作,但现在竟然要做20,000次,自然慢多了。
索引还和物理组织呀、聚簇因子呀等等都有关系。
5、Oracle文件
Oracle文件主要有服务器参数文件、数据文件、控制文件、密码文件、在线日志文件等等,这些开发人员也应该大概的了解下。
6、事务
事务对于并发系统而言也是非常重要的机制,所以开发人员要对这块比较了解,Oracle建议是否提交事务要根据数据逻辑的完整性来决定,而不是说越快提交越好,oracle会保证语句级的原子性(例如执行语句时的触发器、存储过程都会控制在统一的事务范围),同时oracle还支持像分布式事务、自治事务等。
对于开发人员而言,要把握的就是什么时候提交事务,应该注意的就是事务应该控制在自己手里来决定什么时候提交,像对于使用jdbc的java开发人员而言,要注意,jdbc默认是执行一条就提交一条的。
7、redo&undo
redo和undo绝对是oracle中非常重要的两个东西,redo用来记录所有的操作,以便oracle在遇到断电等等意外的情况下也可准确的恢复实例和之前的动作,而undo则是用来记录所有的操作的逆动作,以支持像回滚、读一致性这样的操作,从这里我们就可以知道当undo设置的太小或查询执行时间太长的时候,就可能会出现snapshoot too old这种错误。
从这个章节中还得学会评估redo、undo产生的大小,另外就是遵循Tom所说的生产环境一定要是archivelog模式的,否则数据丢了也就只能哭了。
8、数据库表
要了解下oracle中的堆组织表、索引组织表、聚簇索引表等几种表的形式。
9、数据类型
要了解下oracle中的varchar2、number、lob这些类型。
10、表和索引分区
应该了解oracle支持哪几种表和索引分区,什么时候用,怎么去用,开发人员要了解的原因是其实表和索引分区要高效的使用是得根据业务分析来形成的,随意的表和索引分区很有可能会造成性能下降。
这些方面应该是开发人员至少应该了解的,在数据库方面的开发上开发人员最应该关注的就是基本的SQL编写优化法则、并发和锁的控制机制、事务使用机制,因为对于开发而言,会带来挑战的就是在并发的情况下,设计人员则应根据数据库的并发实现机制来尽量减少锁等待的现象,其他的调优工作可以由DBA来完成,但开发人员也应该提供辅助,像表分区的做法等等。根据Tom在书中描述的数据库的锁机制、并发机制等等,可以看出每种数据库在实现这些方面都是不一样的,所以要做到数据库独立性其实是不可能的,就像Tom说的,付出了那么高的价格买下了数据库,难道你就只是把它当成一个简单的文件系统而使用,而不去充分使用/发挥它的功能,因为很多时候你付出了巨大努力实现的东西对于数据库而言也许就只是简单的一句话而已,所以从此我对数据库独立性也say NO!,即使是使用Hibernate这种相对来讲可以使数据库独立的东西,几个简单的例子来说明在数据库切换时要做的工作:
1、is null和字段=null
在Oracle和SQL Server中采用的均为is null,而在有些数据库里采用的则是字段=null的方式来获取。
2、函数
例如sql server的dateadd、identity这些,到了oracle中自然要切换。
3、锁机制
这个是最麻烦的,就像你在oracle中可以使用select而不必担心读会阻塞写,但在sql server中就得带上with nolock。
4、事务
虽然表面看起来事务类型都是一样的,但各种数据库实现事务机制方法的不同决定了在切换的时候还得考虑事务使用上是不是要修改。
对于1、2两点你可以尽量的避免,3、4两点则是无法避免的,所以在是使用数据库上不用过多的去考虑数据库独立性的实现,当然,这并不意味着hibernate这些ORM的东西就不需要了,:),我倒是一直非常希望有哪个ORM工具能透明实现数据库的切换,包括上面所说的那些机制的自动转换,但这相对而言几乎是不可能的,因为要对每种数据库都精通才能做得到。
第二篇:C++编程思想读后感
Unit One对象的演化
oop技术能够很容易地将大量问题归纳为一个简单的解,这一发现产生了大量的oop语言,其中最著名的是Smalltalk—C++之前最成功的oop语言。
继承表示了基本类型和派生类型之间的相似性,程序员创建一个基本类型以描述系统中一些对象的思想核心。由这个基本类型派生出其他类型,表达了认识该核心的不同途径。
早捆绑意味着编译器对特定的函数名产生调用,而连接器确定调用执行代码的绝对地址。对于。Oop采用动态绑定。当给对象发送消息时,在程序运行之前不去确定被调用的代码。编译器保证这个被调用的函数存在,并完成参数和返回值的类型检查,但是它不知道将执行的准确代码。为了实现晚捆绑,编译器在真正调用的地方插入一段特殊的二进制代码。通过使用存放在对象自身中的信息,这段代码在运行时计算被调用函数的地址。这样,每个对象就能根据一个指针的内容有不同的行为。当一个对象接收到消息时,它根据这个消息判断应当做什么。
程序员可以用关键字v i r t u a l表明他希望某个函数有晚捆绑的灵活性,而并不需要懂得v i r t u a l的使用机制。没有它,就不能用C + +做面向对象的程序设计。Vi r t u a l函数(虚函数)表示允许在相同家族中的类有不同的行为。这些不同是引起多态行为的原因。
用C 语言编写的过程程序就是一些数据定义和函数调用。要理解这种程序的含义,程序员必须掌握函数调用和函数实现的本身。这就是过程程序需要中间表示的原因。中间表示容易引起混淆,因为中间表示的表述是原始的,更偏向于计算机,而不偏向于所解决的问题。
通常,面向对象程序需要较少的代码,因为问题中的许多部分都可以用已存在的库代码。
C+ +成功的原因是经济上的:转变到O O P需要代价,而转变到C + +所花的代价较小。尽可能地为程序员提供最大便利。
为C + +堵塞了C语言中的一些漏洞,并提供更好的类型检查和编译时的分析。程序员必须先说明函数,使编译器能检查它们的使用情况。预处理器虚拟删除值替换和宏,这就减少了查找疵点的困难。C + +有一个性能,称为r e f e r e n c e s(引用),它允许对函数参数和返回值的地址进行更方便的处理。函数重载改进了对名字的处理,使程序员能对不同的函数使用相同的名字。另外,名字空间也加强了名字的控制。许多性能使C的更安全。面向对象的C + +程序的速度与用C写的程序速度相差在± 1 0 %之内,而且常常更接近。用O O P方法设计的程序可能比C的对应版本更有效。
c+ +的主要目标是让程序员能更容易地使用库,这是通过将库转换为新数据类型(类)来完成的。引入一个库,就是向该语言增加一个新类型。编译器负责这个库如何使用,保证适当的初始化和清除,保证函数被正确地调用。
• 模板的源代码重用
一些重要的类型要求修改源代码以便有效地重用。模板可以自动完成对代码的修改,因而是重用库代码特别有用的工具。用模板设计的类型很容易与其他类型一起工作。因为模板对程序员隐藏了这类代码重用的复杂性,所以特别好用。
C + +的异常处理(见第1 7章的内容)保证能检查到错误并进行处理。
C语言同样有这样的限制,例如当程序超过50 000行时,名字冲突就开始成为问题。简言之,程序员用光了函
数和变量名。设计C + +的目的是为了辅助大程序设计,也就是说,去掉小程序和大程序之间复杂性的分界。
程序设计有两个原则:
1)内部原则体现在程序自身的结构中,机灵而有见解的程序员可以通过程序设计语言的表达方式了解这种内部原则。
2)外部原则体现在程序的源信息中,一般被描述为“设计文档”(不要与产品文档混淆)。
过程语言:为科学工作者使用的F O RT R A N(F O R m u l a-T R A N s l a t i o n)和为商业者使用的C O B O L
(COmmon Business-Oriented Language)。纯计算机科学中很成功的语言是L i s p(L i s t-P r o c e s s i n g),而面向数学的语言应当是A P L(A Programming L a n g u a g e)。
1.3.4 对象设计的五个阶段
1)对象发现这个阶段出现在程序的最初分析期间。可以通过寻找外部因素与界线、系统中的元素副本和最小概念单元而发现对象。如果已经有了一组类库,某些对象是很明显的。类之间的共同性(暗示了基类和继承类),可以立刻出现或在设计过程的后期出现。
2)对象装配我们在建立对象时会发现需要一些新成员,这些新成员在对象发现时期未出现过。对象的这种内部需要可能要用新类去支持它。
3)系统构造对对象的更多要求可能出现在以后阶段。随着不断的学习,我们会改进我们的对象。与系统中其它对象通讯和互相连接的需要,可能改变已有的类或要求新类。
4)系统扩充当我们向系统增添新的性能时,可能发现我们先前的设计不容易支持系统扩充。这时,我们可以重新构造部分系统,并很可能要增加新类。
5)对象重用这是对类的真正的重点测试。如果某些人试图在全新的情况下重用它,他们会发现一些缺点。当我们修改一个类以适应更新的程序时,类的一般原则将变得更清楚,直到我们有了一个真正可重用的对象。
对象开发原则
1)让特殊问题生成一个类,然后在解其他问题时让这个类生长和成熟。
2)记住,发现所需要的类,是设计系统的主要内容。如果已经有了那些类,这个项目就不困难了。
3)不要强迫自己在一开始就知道每一件事情,应当不断地学习。
4)开始编程,让一部分能够运行,这样就可以证明或反驳已生成的设计。不要害怕过程语言风格的细面条式的代码—类分割可以控制它们。坏的类不会破坏好的类。
5)尽量保持简单。具有明显用途的不太清楚的对象比很复杂的接口好。我们总能够从小的和简单的类开始,当我们对它有了较好地理解时再扩展这个类接口,但不可能简化已存在的类接口。
第2章数据抽象
库,简单地说就是一些人已经写的代码,按某种方式包装在一起。通常,最小的包是带有扩展名如L I B的文件和向编译器声明库中有什么的一个或多个头文件。连接器知道如何在L I B文件中搜索和提取相应的已编译的代码。但是,这只是提供库的一种方法。在跨越多种体系结构的平台上,例如U N I X,通常,提供库的最明智的方法是用源代码,这样在新的目标机上它能被重新编译。而在微软Wi n d o w s上,动态连接库是最明智的方法,这使得我们能够利用新发布的D D L经常修改我们的程序,我们的库函数销售商可能已经将新D D L发送给我们了。
2.1 声明与定义
“声明”向计算机介绍名字,它说,“这个名字是什么意思”。而“定义”为这个名字分配存储空间。无论涉及到变量时还是函数时含义都一样。无论在哪种情况下,编译器都在“定义”处分配存储空间。对于变量,编译器确定这个变量占多少存储单元,并在内存中产生存放它们的空间。对于函数,编译器产生代码,并为之分配存储空间。函数的存储空间中有一个由使用不带参数表或带地址操作符的函数名产生的指针。定义也可以是声明。如果该编译器还没有看到过名字A,程序员定义int A,则编译器马上为这个名字分配存储地址。声明常常使用于e x t e r n关键字。如果我们只是声明变量而不是定义它,则要求使用e x t e r n。对于函数声明,e x t e r n是可选的,不带函数体的函数名连同参数表或返回值,自动地作为一个声明。
C+ +要求必须写出函数原型(的全部信息),因为它增加了一个重要的安全层。
第三篇:《高质量c语言编程》读后感
高质量c语言编程》的读后感
读完《高质量c语言编程》这本书,对其有了大概的了解:这本书共有十一章,分别讲述了文件的结构 程序的版式 命名的规则 表达式和基本语句 常量 函数设计 内存管理 C++函数的高级特性 类的构造函数 析构函数与赋值函数 类的继承与组合 其他编程经验。
从本书的前言,可以看出作者是一个c编辑的老手,而且当之无愧,书中介绍了好多有关c语言编辑的细节问题,本人认为这些值得那些以后搞编程的同学看看,对其以后更快更高质量的编写c语言会有很大帮助!
本书主要分为两个部分:
1-6章为一个部分:1到6章主要讲述了c++c的编程风格,难度不高,但细节比较多。细节决定成败,只有抓住点点滴滴,才能写出高质量的c语言程序。每一章都有其侧重点,作者精心安排。首先写了文件结构,作者从头文件的结构,定义文件结构,目录结构等方面介绍了文件结构的功能和使用方法,接下来讲了程序的版式和命名规则,比以前学的更注重细节,也对空行,注释,代码行等以前不关注的内容有了进一步的了解。第四章讲了表达式和基本语句,作者精益求精,抓住我们易错的点,将这些编程中的关键点,直白明了的展现出来,是我对这些内容有了更深的了解,也促进了对这些知识的记忆。第五章讲了常量,讲了c语言定义常量的规则并指出c可以用define定义常量,而c++又扩展了const定义常量的方法,虽然不太
懂,但有了大概了解。第6章讲了函数设计。
7-11章为一个部分:第七章讲内存管理,第八章讲C++的高级特性,第九章讲构造函数等内容,第十章讲的继承和组合,第十一章讲了其他的编程经验。这几个部分是个难点,好多部分都看不懂,但书中的思想可以领会一些,希望在以后的学习中能够循序渐进,获得进一步的理解和掌握.记得老师说,指针的学习是c语言的重点,学习指针,不管是看教材,还是看课外书,对我来说都是一大难题,也许照老师说的自己动手写程序会加深记忆在精读课本会有所改善,作者也说道学习指针要养成“使用调试器逐步跟踪程序”的习惯。像平常老师说的只有动手写,动手做才会有所收获,作者捉住重点,抛砖引玉,很多地方都给我们作了详细介绍,并指出c语言编程过程中的注意事项,也提高了我在编程过程中的警惕性。
读完这本书之后,我对于C语言这门课成有了更进一步的了解和认识,所谓的语言就是要不断地练习不断地去尝试,只有经过不断的改正不断的重写才能学好这门课程,C语言不能只是一味的模仿课本上的例题,模仿是不会有进步的,要永远记住模仿的东西不是自己的。只有不断地创新才能有突破,想要学好C语言必须学会自己尝试写程序。质变总是由量变转换而来的,没有大量的练习是不能够促成质变的,程序的编写不仅仅要求数量还要有高质量,一个程序的编写有好多种方法,但是我们需要一个既简单又高效的程序。
第四篇:C++编程思想读后感1
C++编程书评
最近一段时间都在看c++编程,想让自己对计算机有更多的了解,和更好的运用,这也是对自我的一种知识面的一种提升。更多的可能还是出于自己对这方面的热爱吧。那我就把我读后对书本的了解,不过大多数都是书上的一些重点还有一些专业术语。主要也是对这本书的大概介绍吧!
用C 语言编写的过程程序就是一些数据定义和函数调用。要理解这种程序的含义,程序员必须掌握函数调用和函数实现的本身。这就是过程程序需要中间表示的原因。中间表示容易引起混淆,因为中间表示的表述是原始的,更偏向于计算机,而不偏向于所解决的问题。
通常,面向对象程序需要较少的代码,因为问题中的许多部分都可以用已存在的库代码。
C+ +成功的原因是经济上的:转变到O O P需要代价,而转变到C + +所花的代价较小。尽可能地为程序员提供最大便利。
为C + +堵塞了C语言中的一些漏洞,并提供更好的类型检查和编译时的分析。程序员必须先说明函数,使编译器能检查它们的使用情况。预处理器虚拟删除值替换和宏,这就减少了查找疵点的困难。C + +有一个性能,称为r e f e r e n c e s(引用),它允许对函数参数和返回值的地址进行更方便的处理。函数重载改进了对名字的处理,使程序员能对不同的函数使用相同的名字。另外,名字空间也加强了名字的控制。许多性能使C的更安全。面向对象的C + +程序的速度与用C写的程序速度相差在± 1 0 %之内,而且常常更接近。用O O P方法设计的程序可能比C的对应版本更有效。
c+ +的主要目标是让程序员能更容易地使用库,这是通过将库转换为新数据类型(类)来完成的。引入一个库,就是向该语言增加一个新类型。编译器负责这个库如何使用,保证适当的初始化和清除,保证函数被正确地调用。
模板的源代码
一些重要的类型要求修改源代码以便有效地重用。模板可以自动完成对代码的修改,因而是重用库代码特别有用的工具。用模板设计的类型很容易与其他类型一起工作。因为模板对程序员隐藏了这类代码重用的复杂性,所以特别好用。C语言同样有这样的限制,例如当程序超过50 000行时,名字冲突就开始成为问题。简言之,程序员用光了函数和变量名。设计C + +的目的是为了辅助大程序设计,也就是说,去掉小程序和大程序之间复杂性的分界。
程序设计有两个原则
1)内部原则体现在程序自身的结构中,机灵而有见解的程序员可以通过程序设计语言的表达方式了解这种内部原则。
2)外部原则体现在程序的源信息中,一般被描述为“设计文档”(不要与产品文档混淆)。
对象设计的五个阶段
1)对象发现这个阶段出现在程序的最初分析期间。可以通过寻找外部因素与界线、系统中的元素副本和最小概念单元而发现对象。如果已经有了一组类库,某些对象是很明显的。类之间的共同性(暗示了基类和继承类),可以立刻出现或在设计过程的后期出现。
2)对象装配我们在建立对象时会发现需要一些新成员,这些新成员在对象发现时期未出现过。对象的这种内部需要可能要用新类去支持它。
3)系统构造对对象的更多要求可能出现在以后阶段。随着不断的学习,我们会改进我们的对象。与系统中其它对象通讯和互相连接的需要,可能改变已有的类或要求新类。
4)系统扩充当我们向系统增添新的性能时,可能发现我们先前的设计不容易支持系统扩充。这时,我们可以重新构造部分系统,并很可能要增加新类。
5)对象重用这是对类的真正的重点测试。如果某些人试图在全新的情况下重用它,他们会发现一些缺点。当我们修改一个类以适应更新的程序时,类的一般原则将变得更清楚,直到我们有了一个真正可重用的对象。
对象开发让特殊问题生成一个类,然后在解其他问题时让这个类生长和成熟。2 记住,发现所需要的类,是设计系统的主要内容。如果已经有了那些类,这个项目就不困难了。不要强迫自己在一开始就知道每一件事情,应当不断地学习。
4开始编程,让一部分能够运行,这样就可以证明或反驳已生成的设计。不要害怕过程语言风格的细面条式的代码—类分割可以控制它们。坏的类不会破坏好的类。尽量保持简单。具有明显用途的不太清楚的对象比很复杂的接口好。我们总能够从小的和简单的类开始,当我们对它有了较好地理解时再扩展这个类接口,但不可能简化已存在的类接口。
库
简单地说就是一些人已经写的代码,按某种方式包装在一起。通常,最小的包是带有扩展名如L I B的文件和向编译器声明库中有什么的一个或多个头文件。连接器知道如何在L I B文件中搜索和提取相应的已编译的代码。但是,这只是提供库的一种方法。在跨越多种体系结构的平台上,例如U N I X,通常,提供库的最明智的方法是用源代码,这样在新的目标机上它能被重新编译。而在微软Wi n d o w s上,动态连接库是最明智的方法,这使得我们能够利用新发布的D D L经常修改我们的程序。
声明与定义
“声明”向计算机介绍名字,它说,“这个名字是什么意思”。而“定义”为这个名字分配存储空间。无论涉及到变量时还是函数时含义都一样。无论在哪种情况下,编译器都在“定义”处分配存储空间。对于变量,编译器确定这个变量占多少存储单元,并在内存中产生存放它们的空间。对于函数,编译器产生代码,并为之分配存储空间。函数的存储空间中有一个由使用不带参数表或带地址操作符的函数名产生的指针。定义也可以是声明。如果该编译器还没有看到过名字A,程序员定义int A,则编译器马上为这个名字分配存储地址。声明常常使用于e x t e r n关键字。如果我们只是声明变量而不是定义它,则要求使用e x t e r n。对于函数声明,e x t e r n是可选的,不带函数体的函数名连同参数表或返回值,自动地作为一个声明。
或许你看过后或许懂了一点,也对编程有了初步的了解,希望我的书评对你能有所帮助!
第五篇:说话艺术读后感
《说话的艺术》读后感
书言:
说话的时候一定要有同理心,同理心就是说从别人角度来设想,去了解别人在什么样情况,他有什么样的需要,你怎么讲他才会听得进去,他才愿意接受。这是孟子说话艺术的首语,而孟子这一方面的表现也是很特别的。
孟子的“与人为善”
我们今天讲“与人为善”的时候,有一点放水的意思,就是说你不要这么严格,让我过关吧,与人为善,孟子不是这个意思。根据孟子的说法就是与人为善。他先学别人的优点,把别人的优点拿来在自己的身上实现,让别人发现原来我的优点是可以照舜的方式来实现,那别人也愿意行善。
自言:
看完《说话的艺术后》后,除开明白说话要委婉外还需要“认真倾听对方的谈话”。认真倾听对方的谈话,正是我们对他人的一种最高的恭维。很少有人能拒绝那种带有恭维的认真倾听。如果你希望自己成为一个善于谈话的人,首先就要做一个善于倾听别人的人。要做到这一点其实并不难,你不妨问问别人一些他们喜欢回答的问题,鼓励他们开口说话,说说他们自己以及他们所取得的成就。
认真倾听对方的表达,对方得到的感受是,被尊敬、被重视、被真诚地对待和关注。而且,不随意打断对方表达的思路和过程,可以让对方完整而随心地表述清楚,甚至尽情渲泄,得到表述目的的达成,以及表达的成就感和舒畅感,也会让对方感受到倾听者的修为和涵养。而认真倾听对于我们自己的好处,是通过倾听和适当的提问式引导,得到更为充分、完整的信息,从中更为清晰地调整自己准备回应的表达思路,以及表达顺序的连贯性和逻辑性,明确自己谈话所要实现的目的和重点,平和自然而且有效地进行与对方之间的谈话。
再者,表述清楚自己的意思,要想着如何从对方的角度出发,让对方理解我们所要表达的意思,而不是只站在自己的思维角度去说自己能够听懂的话,这就是有时我们以为自己说清楚了,而对方却领会错了意思的一个原因吧。