现在的位置: 首页 > 综合 > 正文

一针见血谈谈面向对象的思维方法(转载) 一个人到中年的职场老油子和应届毕业生谈招聘

2011年01月04日 ⁄ 综合 ⁄ 共 15688字 ⁄ 字号 评论关闭

从学习Java编程开始接触OOP(面向对象编程),刚开 始使用Java编写程序的时候感觉很别扭,因为早以习惯用C来编写程序,很欣赏C的简洁性和高效性,喜欢C简练而表达能力丰富的风格,特别忍受不了 Java运行起来慢吞吞的速度,相对冗长的代码,而且一个很简单的事情,要写好多类,一个类调用一个类,心里的抵触情绪很强。

我对Java的面向对象的特性琢磨良久,自认为有所领悟,也开始有意识的运用OOP风格来写程序,然而还是经常会觉得不知道应该怎样提炼类,面对一个具体的问题的时候,会觉得脑子里千头万绪的,不知道怎么下手,一不小心,又会回到原来的思路上去。

举个例子,要发广告邮件,广告邮件列表存在数据库里面。倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。

然后考虑用Java来实现,既然是OOP,就不能什么代码都塞到main过程里面,于是就设计了三个类:

一个类是负责读取数据库,取邮件地址,调用qmail的sendmail命令发送;

一个类是读邮件内容,MIME编码成HTML格式的,再加上邮件头;

一个主类负责从命令读参数,处理命令行参数,调用发email的类。

把一件工作按照功能划分为3个模块分别处理,每个类完成一件模块任务。

仔细的分析一下,就会发现这样的设计完全是从程序员实现程序功能的角度来设计的,或 者说,设计类的时候,是自低向上的,从机器的角度到现实世界的角度来分析问题的。因此在设计的时候,就已经把程序编程实现的细节都考虑进去了,企图从底层 实现程序这样的出发点来达到满足现实世界的软件需求的目标。

这样的分析方法其实是不适用于Java这样面向对象的编程语言,因为,如果改用C语言,封装两个C函数,都会比Java实现起来轻松的多,逻辑上也清楚的多。

我觉得面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。

举一个非常简单的例子:假使现在需要写一个网页计数器,客户访问一次页面,网页计数器加1,计数器是这样来访问的

http://hostname/count.cgi?id=xxx

后台有一个数据库表,保存每个id(一个id对应一个被统计访问次数的页面)的计数器当前值,请求页面一次,对应id的计数器的字段加1(这里我们忽略并发更新数据库表,出现的表锁定的问题)。

如果按照一般从程序实现的角度来分析,我们会这样考虑:首先是从HTTP GET请求取到id,然后按照id查数据库表,获得某id对应的访问计数值,然后加1,更新数据库,最后向页面显示访问计数。

现在假设一个没有程序设计经验的人,他会怎样来思考这个问题的呢?他会提出什么样的需求呢?他很可能会这样想:

我需要有一个计数器,这个计数器应该有这样的功能,刷新一次页面,访问量就会加1,另外最好还有一个计数器清0的功能,当然计数器如果有一个可以设为任意值的功能的话,我就可以作弊了。

做为一个没有程序设计经验的人来说,他完全不会想到对数据库应该如何操作,对于HTTP变量该如何传递,他考虑问题的角度就是我有什么需求,我的业务逻辑是什么,软件应该有什么功能。

按照这样的思路(请注意,他的思路其实就是我们平时在生活中习惯的思维方式),我们知道需要有一个计数器类 Counter,有一个必须的和两个可选的方法:

getCount() // 取计数器值方法

resetCounter() // 计数器清0方法

setCount() // 设计数器为相应的值方法

把Counter类完整的定义如下:

public class Counter {

public int getCount(int id) {}

public void resetCounter(int id) {}

public void setCount(int id, int currentCount) {}

}

解决问题的框架已经有了,来看一下如何使用Counter。 在count.cgi里面调用Counter来计数,程序片断如下:

// 这里从HTTP环境里面取id值

...

Counter myCounter = new Counter(); // 获得计数器

int currentCount = myCounter.getCount(id); // 从计数器中取计数

// 这里向客户浏览器输出

...

程序的框架全都写好了,剩下的就是实现Counter类方法里面具体的代码了,此时才去考虑具体的程序语言实现的细节,比如,在getCount()方法里面访问数据库,更新计数值。

从上面的例子中看到,面向对象的思维方法其实就是我们在现实生活中习惯的思维方式,是从人类考虑问题的角度出发,把人类解决问题的思维方式逐步翻译成程序能够理解的思维方式的过程,在这个翻译的过程中,软件也就逐步被设计好了。

在运用面向对象的思维方法进行软件设计的过程中,最容易犯的错误就是开始分析的时候,就想到了程序代码实现的细节,因此封装的类完全是基于程序实现逻辑,而不是基于解决问题的业务逻辑。

学习JDBC编程的经典错误问法是:“我怎样封装对数据库的select操作?”

面向对象的设计是基于解决业务问题的设计,而不是基于具体编程技术的设计。我不会去封装select语句的,我只封装解决问题的业务逻辑,对数据库的读取是在业务逻辑的编码实现阶段才去考虑的问题。

回过头看上面那个发广告邮件的例子,应该如何应用面向对象的思维方法呢?

对于一个邮件来说,有邮件头,邮件体,和邮件地址这三个属性,发送邮件,需要一个发送的方法,另外还需要一个能把所有邮件地址列出来的方法。所以应该如下设计:

类JunkMail

属性:

head

body

address

方法:

sendMail() // 发送邮件

listAllMail() // 列邮件地址

用Java来表示:

public class JunkMail {

private String head;

private String body;

private String address;

public JunkMain() { // 默认的类构造器

// 从外部配置文件读邮件头和邮件体

this.head=...;

this.body=...;

}

public static boolean sendMail(String address) {

// 调用qmail,发送email

}

public static Collection listAllMail() {

// 访问数据库,返回一个邮件地址集合

}

}

当把JunkMail设计好了以后,再调用JunkMail类完成邮件的发送,将是非常轻松的事情。

如果说传统的面向过程的编程是符合机器运行指令的流程的话,那么面向对象的思维方法就是符合现实生活中人类解决问题的思维过程。

在面向对象的软件分析和设计的时候,要提醒自己,不要一上来就去想程序代码的实现,应该抛开具体编程语言的束缚,集中精力分析我们要实现的软件的业务逻辑,分析软件的业务流程,思考应该如何去描述和实现软件的业务。毕竟软件只是一个载体,业务才是我们真正要实现的目标。

但是在设计过程中,心里却往往在担心,如果我完全不去考虑程序代码的实现的话,那么我怎么知道我的设计一定合理呢?我怎么知道我设计的类、接口一定可以实现呢?所以经常可以看到的现象就是:

在设计过程中,虽然知道不能过早考虑代码实现,但是每设计一个类,一个接口,心里都要不知不觉的用自己熟悉的编程语言大概的评估一下,看看能否编出来,因此,一不小心,就会又回到按照程序功能实现的思路进行设计的老路上去了。

举个例子来说明,在做Web程序设计的时候,经常要遇到分页显示数据的情况。比如说 需要把系统中所有的用户都列出来这样的功能。假设使用User类来表示用户,增加用户addUser(),删除用户deleteUser(),查询所有用 户listUsers()方法。而数据库中有一个user表,一条记录是一个用户的信息。下面考虑一下User类的方法的实现:

addUser()和deleteUser()方法都好实现,就是对数据库增加记录和删除记录。对于listUsers()方法,其实就是对user表的select,取出一个记录集。但是该怎么从listUsers()方法中得到所有用户的列表呢?

一个方法调用的返回值只有一个,没有多个,所以很多情况下采用的办法就是返回值定义 为集合类型,比如Vector。这样就可以在listUsers()方法的具体代码实现的时候,从数据库依次取出一个个记录,插入到Vector里面来。 在主程序里面,调用listUsers()方法可以返回一个Vector,然后再对Vector遍历操作,就可以得到用户列表了。

public class User {

public static void addUser(...) {

// 数据库insert一条记录

}

public static void deleteUser(...) {

// 数据库delete一条记录

}

public Vector listUsers(...) {

// 数据库select结果放到一个集合里面

}

}

这样的设计基本合理,但是仍然有点小问题。因为在设计的时候,就考虑到了用Java 的集合类Vector来实现对不定长数据集的存放,因而违反了面向对象设计的一个原则:在设计的时候不应过早的考虑具体程序语言的实现。所以必须用抽象的 方法,和具体实现无关的方法来表达业务逻辑。

我们知道,通常对具有集合特征的数据结构进行遍历通常可以使用next和hasNext方法,next实现取下一个用户,hasNext判断是否还有元素。 因此我们定义一个接口Iterator,这个接口中定义两个方法next和hasNext:

public interface Iterator {

public boolean hasNext() {}

public Object next() {}

}

而User类的listUses方法返回值改为Iterator接口的实现类:

public class User {

...

public Iterator listUsers() {

}

...

}

这样就把User类的设计和具体的实现方法分离开了,因为此时任何实现了next ()和hasNext()方法的类都可以做为listUsers的返回值,都可以被用来表达“用户列表”,而不仅仅可以使用Vector而已。比如,我可 以用ArrayList来表达用户列表,因为ArrayList也实现了Iterator,当然我也可以自己专门写一个类来存放用户列表,只要实现 next()和hasNext()方法就行了。

这样在具体的编写代码的时候,程序员具有了最大的灵活性,可以根据具体的情况,采用不同的编程方法来存放用户列表。特别是降低了程序的耦合度,提高了程序的可移植性。对于上面那个JunkMail的listAllMail()方法也同样应该改为接口类型。

然后,在主程序里面就这样来使用User类的listUsers方法:

User myUser = new User();

Iterator iterator = myUser.listUsers();

while (iterator.hasNext()) {

iterator.next();

}

这样就可以完全不用考虑程序代码实现了,从高层次上把功能抽象出来,定义成为接口,同时又可以把系统设计的很合理,完全根据业务的需求来进行设计。

结语

通过上面的几个例子的设计说明,使用面向对象的思维方法,其实是一个把业务逻辑从具 体的编程技术当中抽象出来的过程,而这个抽象的过程是自上而下的,非常符合人类的思维习惯,也就是先不考虑问题解决的细节,把问题的最主要的方面抽象成为 一个简单的框架,集中精力思考如何解决主要矛盾,然后在解决问题的过程中,再把问题的细节分割成一个一个小问题,再专门去解决细节问题。

因而一旦牢牢的抓住了这一点,你就会发现在软件设计和开发过程中,你自己总是会不知不觉的运用面向对象的思维方法来设计和编写程序,并且程序的设计和开发也变得不再那么枯燥,而一个合理运用面向对象技术进行设计和架构的软件,更是具备了思维的艺术美感。

最后,愿面向对象的思维方法也能给您的程序设计之路带来创作的乐趣。

 

Design Class Diagrams   

Strategy

"Strategy, State, Bridge (and to some degree Adapter) have similar solution structures. They all share elements of the "handle/body" idiom. They differ in intent - that is, they solve different problems." [Coplien, Advanced C++, p58]

Most of the GoF patterns exercise the two levels of indirection demonstrated here.

  1. Promote the "interface" of a method to an abstract base class or interface, and bury the many possible implementation choices in concrete derived classes.
  2. Hide the implementation hierarchy behind a "wrapper" class that can perform responsibilities like: choosing the best implementation, caching, state management, remote access.

State

"Strategy is a bind-once pattern, whereas State is more dynamic." [Coplien, C++ Report, Mar96, p88]

Bridge

The structure of State and Bridge are identical (except that Bridge admits hierarchies of envelope classes, whereas State allows only one). The two patterns use the same structure to solve different problems: State allows an object's behavior to change along with its state, while Bridge's intent is to decouple an abstraction from its implementation so that the two can vary independently. [Coplien, C++ Report, May 95, p58]

Composite

Three GoF patterns rely on recursive composition: Composite, Decorator, and Chain of Responsibility.

Flyweight

Flyweight is often combined with Composite to implement shared leaf nodes. [GoF, p206]

Flyweight shows how to make lots of little objects. Facade shows how to make a single object represent an entire subsystem. [GoF, p138]

This diagram is perhaps a better example of Composite than the Composite diagram.

Interpreter

Interpreter is really an application of Composite.

Decorator

Decorator is designed to let you add responsibilities to objects without subclassing. Composite's focus is not on embellishment but on representation. These intents are distinct but complementary. Consequently, Composite and Decorator are often used in concert. [GoF, p220]

Chain of Responsibility

Chain of Responsibility, Command, Mediator, and Observer, address how you can decouple senders and receivers, but with different trade-offs. Chain of Responsibility passes a sender request along a chain of potential receivers.

Facade

Facade defines a new interface, whereas Adapter uses an old interface. Remember that Adapter makes two existing interfaces work together as opposed to defining an entirely new one. [GoF, p219]

Adapter

Adapter makes things work after they're designed; Bridge makes them work before they are. [GoF, p219]

Bridge is designed up-front to let the abstraction and the implementation vary independently. Adapter is retrofitted to make unrelated classes work together. [GoF, 216]

Proxy

Decorator and Proxy have different purposes but similar structures. Both describe how to provide a level of indirection to another object, and the implementations keep a reference to the object to which they forward requests. [GoF, p220]

Adapter provides a different interface to its subject. Proxy provides the same interface. Decorator provides an enhanced interface. [GoF. p216]

Command

Command and Memento act as magic tokens to be passed around and invoked at a later time. In Command, the token represents a request; in Memento, it represents the internal state of an object at a particular time. Polymorphism is important to Command, but not to Memento because its interface is so narrow that a memento can only be passed as a value. [GoF, p346]

Memento

Command can use Memento to maintain the state required for an undo operation. [GoF, 242]

Iterator

Memento is often used in conjunction with Iterator. An Iterator can use a Memento to capture the state of an iteration. The Iterator stores the Memento internally. [GoF, p271]

Mediator

Mediator is similar to Facade in that it abstracts functionality of existing classes. Mediator abstracts/centralizes arbitrary communications between colleague objects. It routinely "adds value", and it is known/referenced by the colleague objects. In contrast, Facade defines a simpler interface to a subsystem, it doesn't add new functionality, and it is not known by the subsystem classes. [GoF, p193]

Observer

Mediator and Observer are competing patterns. The difference between them is that Observer distributes communication by introducing "observer" and "subject" objects, whereas a Mediator object encapsulates the communication between other objects. We've found it easier to make reusable Observers and Subjects than to make reusable Mediators. [GoF, p346]

On the other hand, Mediator can leverage Observer for dynamically registering colleagues and communicating with them. [GoF, p282]

Template Method

Template Method uses inheritance to vary part of an algorithm. Strategy uses delegation to vary the entire algorithm. [GoF, p330]

Visitor

The Visitor pattern is the classic technique for recovering lost type information without resorting to dynamic casts. [Vlissides, "Type Laundering", C++ Report, Feb 97, p48]

Factory Method

Factory Methods are usually called within Template Methods. [GoF, p116]

Often, designs start out using Factory Method (less complicated, more customizable, subclasses proliferate) and evolve toward Abstract Factory, Prototype, or Builder (more flexible, more complex) as the designer discovers where more flexibility is needed. [GoF, p136]

Prototype

Factory Method: creation through inheritance. Prototype: creation through delegation.

Abstract Factory

Abstract Factory classes are often implemented with Factory Methods, but they can be implemented using Prototype. [GoF, p95]

Builder

Builder focuses on constructing a complex object step by step. Abstract Factory emphasizes a family of product objects (either simple or complex). Builder returns the product as a final step, but as far as the Abstract Factory is concerned, the product gets returned immediately. [GoF, p105]

Singleton

Singleton should be considered only if all three of the following criteria are satisfied:

  • Ownership of the single instance cannot be reasonably assigned
  • Lazy initialization is desirable
  • Global access is not otherwise provided for

 一个人到中年的职场老油子和应届毕业生谈招聘      CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

一个人到中年的职场老油子和应届毕业生谈招聘

  作者:醉卧中关村
 
  又到春天了,大学生们又该忙找工作了。我作为一个人到中年的职场油子谈谈招聘,希望能对大家的择业有所帮助吧。
  首先要解开一个误区,那就是应届的大学毕业生很难找工作。
  对于我而言,我这么多年从来没有歧视过应届毕业生。而且我身边的很多公司,包括我的同行,也都不歧视。这点大家大可放心。
  通常来说,一个公司的业务模块无外乎两大块。一大块是商务性的业务模块,包括了销售、市场、客户管理等等,有的公司把项目管理也划到了这一块,也有的公司反之。而我这么多年一直从事的工作,就是市场部的工作。
  除了商务性的业务模块之外,剩下的就是生产、研发性的业务模块了。比如系统开发、测试、项目实施、项目管理、系统集成等等。
  除了商务、生产这两大模块之外,就是一些事务性较为繁杂的部门,比如行政、财务、人力资源等等。
  一般来说,应届毕业生尽管缺少经验,但却有着得天独厚的优势,那就是好塑造,好改造。所以,很多公司的都愿意在生产型、研发型的业务部门招聘应届毕业生。
  但有些岗位,比如市场部、销售部,需要一定的阅历和年纪。尤其是销售型的部门,更是需要相当强的阅历和沟通能力。
  所以,相对应届毕业生而言,商务性的业务模块,应聘起来会有一定的难度。
  但大家不必灰心,多尝试几家公司。大部分具有一定规模,有一定实力的公司都不歧视应届生。
  
  第二点谈谈考研和文凭吧。
  从我个人来说,我可以负责的讲,我几乎不怎么看对方是什么学校毕业的。换句话讲,是不是北大的,还是某个不知名的二类院校的,对于招聘的人,可能没什么大区别。
  考研的问题可能是快要毕业的朋友都要考虑的。我用我本身的经历告诉大家,如果你想考研,那就坚定地考。等你开始工作,可能很多的时间在结交自己的朋友圈,或者忙于工作,或谈恋爱等等……你很难再有在校园里面这么整块时间来读书了。
  
  !!!而读到自己脑子里的东西,是谁都带不走的,无论你将来落难了也好,众叛亲离也好,走投无路也好,你自己脑子里的知识,是跟着你一生的,是任何人都抢夺不走的!!!
  假如,你三十多岁,老婆跟你闹离婚,房子、车子都可能失去。但知识不会失去!
  我这里说的是知识,但读研能否把自己读的书转化为知识,那就要看自己了。
  
  第三点说说性别吧。
  首先,大家有一个普遍的误解,认为女生在找工作的时候受到歧视。
  我这里简单解释一下女生找工作相对的难度。一般来说,很多公司中层都是男性一统天下。就我们公司来说,中层的部门经理除了行政、财务之外,全是男的。
  这里就有一个问题,那就是管理的难度。说白了,我招聘一个男的相对好管理。而女孩子说重了,对方受不了,说轻了,让对方产生误解。招个男的则没有这样的麻烦,大不了哥们交情一叙,大家喝顿酒,很多问题都好谈。
  另外一点就是方便。比如说,我出差带一个同事,要是男的,咱俩开一个标准间,三百块顶到天了。要是个女孩子,还得开两个房间。
  至少我这么几年,几乎没有招聘进公司几个女孩子,好像只有平面设计和媒介。
  这一点很无奈,那就是很多像我这样年纪的人,都觉得招聘男的进自己部门,相对便于管理。
  这里不是歧视,而是从工作本身来说的。
  另外一个误区就是相貌较好的女生应聘时有优势。
  这个问题很有意思,坦白的说,男人都有个坏毛病,漂亮女人都爱看。但爱看和招聘进自己公司是完全两个不同的概念。
  至少我这么多年,很少对我身边的女同事有过什么遐想。而在职场里面,和自己的同事发生办公室恋情是一个大忌。
  所以大家尽管放心,相貌不是招聘的条件。
  但有一点,这个可能是一个默认的共识,那就是不能太难看。长相平凡可以,但不能长得跟那个啥姐姐一样,那就受不了了。
  所以,我经常看到打印的相当精美的简历,后面附上艺术照,其实大可不必。这是招聘,不是选妃子,呵呵。
  
  第四点,说说应聘时的着装。
  可能大部分走出校门的人,很多人会说,要穿西服打领带,穿职业装。这里也是一个误区。
  从我来说,我除了必须打领带的场合,平时几乎很少打领带。但我上班会穿着衬衫,下面一般也多是西裤,办公室里会挂着一件西服,但很少穿。这样的好处就是一旦需要突然见个什么人,领带系上,穿上西服就行了。
  而我身边的人,大部分也都是这么干的。至于下班,更是没人管了。我常年穿着美军的M65风衣,嚣张穿行于闹市,哈哈。当然,上班不能这么穿。
  所以,如果参加招聘会,或者去面试,穿得干净整洁就行。当然,如果穿着西服会让你感觉有自信,那也没问题。
  但切记一点,穿任何衣服都不能掩饰你的青涩,岁月写在脸上的东西,是你无论如何在刚刚走出校门的时候装不出来的。年轻有年轻的魅力,成熟有成熟的魅力,呵呵。
  另外,我发现很多人为了显得正式,喜欢穿白衬衫。白衬衫穿着确实显得干净、利落,但问题是也显得你年轻。呵呵,我今年特别爱穿白色了,这样显得自己年轻一点。但刚刚走出校门的朋友,建议你选择衬衫稍稍显得成熟一点比较好,这样可以中和一下。
  有一点需要强调,招聘会上无所谓,但应聘的时候最安全的办法是穿皮鞋去。
  我是个很率性的人,我这个部门也从来不强调着装问题。但是,你去面试的时候,对方是一个未知数,稳妥的办法最好穿着皮鞋。
  一般来说,皮鞋也有很多种。而系鞋带的那种,一般被视为正装鞋。所以,选择皮鞋也最好是系带子的那种,呵呵。我个人来说,比较喜欢系带子的鞋。
  女孩子的着装,务求简单、简洁、利落。不一定要正装,但切忌,那种出去玩的时候穿的太性感的衣服最好不要穿着去面试。
  女孩子的发型多数都强调自己的个性,这个我不反对。但面试的时候,最稳妥地办法就是不要把头发弄得过于古怪。
  还有一点,面试的时候最好带个包,这里说的包不是那种粉可爱粉可爱的包包,而是一个看上去比较中性一点的包。也不用什么LV名牌,简洁一点,能装简历、学历什么的就行了。
  另外,切忌,不要穿着拖鞋光着脚就跑去面试。如果实在想光着脚,至少穿个凉鞋。
  嗯,我来解释一下,一般正式的场合,女性光脚,等同于……明白了吧。
  大家着装还有一个误区,认为名牌一定好。其实没必要,一千多一身的西服足够了,我工作这么多年,最贵的衣服也就一千多。咱不是国务院发言人,没必要穿得那么奢华。
  女孩子的套装我不是很清楚,我想也贵不到哪儿去,一千多应该差不多了,没必要买太贵的。
  
  第五点,说说简历
  我说出来大家肯定不信,我工作这么多年,我的简历两页纸足够了。一页中文,一页英文。
  简历要简明扼要,简历简历,不是回忆录,别以为越厚越好。
  最近几次的招聘会上,我收到了很多相当高档的简历。我一般看完之后觉得对方不合适,都会还给对方。有人还不乐意,其实我是帮他省钱。那简历做的,做标书都足够了。
  一般来说,简历要突出自己的特点,但切忌夸大。篇幅控制在一页范围内就行,另外可以再做一个英文版的简历。这里强调一下,英文版的简历写完了要给英文比较过硬的朋友看看,不要闹什么表达上的笑话。
  另外,不要在简历里面把自己吹嘘的天花乱坠。这一点一定要注意。
  说句有点心理阴暗的话,一般招聘的人,江湖经验都不会很差。我这里的意思是,能够面试你的人,至少是一个公司的中层管理者。他见过的,听过的,了解到的牛人,要比你多N多。
  就我而言,我身边有个干了八年JAVA,九几年就开始玩C的牛人。人家一讲话,"这个问题我还不是很懂,我尽力吧。"
  不懂不怕,不会也不怕,说出自己不会,不是一个丢脸的事情。我经常就在工作中遇到不会的东西,这很正常,我从来不觉得自己在某一块知识缺乏是丢脸的事情。
  这个世界是多元化的,谁都不能包打天下。但是,我经常能看到简历里面,列举了一大堆开发语言或工具。但仔细一问,往往对方出洋相。
  所以,简历务必简要,突出重点,不精通或不擅长的东西不要往上面瞎写。
  
  第六点,说说招聘的原理和大致的流程吧
  一般来说,招聘会上,我是指那种专场的招聘会。任何一家公司参加招聘会是有人力、物力的投入的。这其中包括了展位费、布展费,就算不布展,再不济也会喷个板子,那也得好几十块。而人力的投入呢,一场招聘会,至少会去一个中层的部门经理和一个行政性部门的员工。
  哪怕这个部门经理再无能,他的月薪折算这招聘会的一天或两天时间,相当于公司人力的投入至少好几百块出去了。
  所以,刚刚出来混社会的朋友,你们一定要坚信,大部分的公司费时费力的参加招聘会,绝对不是吃饱了撑的。
  我以我们公司为例来说,我们公司规模不大,连带分公司一起,大概有一百多号人。但我们公司没有专门的人力资源部门,只有一个行政专员,负责社保、医疗什么的,同时负责招聘。
  也就是说,去招聘会的,或者面试你的,大部分是在这个圈子里面混了五年以上的混混。他无论是招聘,还是面试,都不会忽悠你,说白了,没时间忽悠你。
  他在乎的是,现在手上压了一堆事情,老板天天骂,或者刚刚跳槽了一个人,自己忙得连约会或喝酒的工夫都没了。
  
  !!!他丝毫不在乎你的薪水,你的学历,你的长相,以及其他不知所谓的啥。他最在乎的是:你能不能分担他现在的压力,他能不能把其中一部分的工作分派给你!!!
  
  明确了这个原理大家就知道了,招聘工作是一个很烦的事情,在公司里面,没人愿意去招聘。能挺着就挺着,实在忙不过来了,才会招聘。而去招聘会,那种挤得跟家乐福一样,空气污浊的地方,吃主办单位提供的十块钱一份的盒饭。凡是干这种傻事的人,都是逼得走投无路了才去干。所以,招聘会是找工作最好的地方。因为,凡是去招聘会的公司,都是急需苦力的地方。
  这里面有个私心的问题。坦白说,谁都有私心,我肯定也有。招聘既然是我工作的一个内容,那我肯定希望多块好省地赶紧找个能干好活的苦力进来,这样我就能相对解脱了。
  一旦明白这个真相,朋友们,别担心工作的问题了,因为有人比你们更担心,他要是再找不到合适的人手,要么他活活被老板或客户折磨死,要么跳槽……
  流程大部分是这样的,我以我们公司为例。一般是部门叫苦,活干不完,要人。然后老板拒绝。然后再次叫苦,并威胁老板。老板忍无可忍,于是有了需求。然后就是登广告,比如网络招聘,如果有招聘会,那就过去。
  收集简历之后,挨个面试,然后圈定合适的人汇报老板。老板如果变卦,那就继续折磨老板,强调了目前苦力的短缺,以及某某项目的重要性。老板认可。然后,亲爱的朋友,欢迎来到本部门,成为苦力!
  这里面有个潜规则,招聘工作吃力不讨好。找个合适的人手进来,没人说你慧眼,只会说这个苦力干活棒,写的码很少出错。
  但要是招了个不合适的进来,那完了,大家都偷偷骂,这人这么次,就是张三招的,张三傻了吧叽的,怎么招了这么一人,等等,诸如此类的人身攻击。
  
  第七、说说面试
  一般来说,面试你的人都不是一个很好对付的人。别看他彬彬有礼,看上去笑眯眯的,很和气的样子。但没准儿一肚子坏水。
  尤其是我这样的,待人特别客气,说话还稍稍有点结巴的,更容易让人上当。
  所以,牢记一点,面试的时候保持高度警觉,对方不经意问出来的问题,很可能是他最想知道的。
  举例来说,我每次面试的时候,最喜欢说的话就是:哦,我不是人力资源的,你别拘束,咱们就当是聊天……
  负责面试的人,一般有两种,一种是专门的人力资源部门。我不懂这一块,略过不谈。
  另外一种就是我这样的,负责某个部门的苦力头。
  一般来说,公司中层的苦力头,他的脑子里面都有一个模式,他的码头上需要一个什么样的人,他或她必须具备哪些技能。但这些考察都是次要的,他首先要搞清楚一点,那就是对方的人品!!!
  换句话说,能力是一个方面,但人品是门槛!!!如果他判定你人品有问题,那剩下的问题就没必要了。
  这里面就有很多陷阱,比如,你怎么评价前一家公司。你要是大说特说那公司怎么不好,我肯定要琢磨了,你昨天背叛少林,那今天会不会背叛武当?
  最好把离职原因淡淡一说,不要指责谁。我找工作的时候,一般都老实说,我自己能力不行,被公司淘汰了。其实大家肚子都揣着明白,不就是为了找个钱多点的地儿嘛。
  我经常问的一个陷阱问题就是:谈谈你的父母。
  其实这个问题一方面是考察对方的家庭教育,另外一方面是看看面试者怎么评价父母。这里面有个通常的逻辑,爹妈把他养这么大,说到自己的父母毫无感恩,感激之情,这种人招进来肯定不能成为合格的苦力。
  有一次招一个人,很扭捏地说,我父母全下岗了。一脸的杂面星表情。
  我一听就怒了,下岗怎么了?下岗丢脸啊,共产当开的这破厂,老子还不干了,老子自己当老板,怎么着!下岗就下岗,坦然面对,下岗了还把你培养成材,还不感激不尽啊。
  那哥们肯定被帕斯了,不是因为他父母下岗,而是他谈到这一点,缺少必要的勇气和自信。
  另外一个哥们,其实他一直是走。NET技术路线的,不是很适合。但他谈到自己的父母特有那种骨子里的自豪感,他说:我家种地的,我父亲是个木匠,是我们全乡最好的木匠,女孩子要是婆家没有他做的家具就不出嫁。
  那种目光中流露出的自豪,当时我就很欣赏,后来他果然证明了这一点,他是个话不多,但很实在,也很仗义的一个人。我和他的私人友谊一直保持到现在,即使是我离开了,他仍然是我多年手机里面保留着号码,时不时一起出来腐败的好兄弟。
  
  总之,面试的时候要牢记一点,面试你的那个混蛋,不管他有多和善,但他问的问题,可能里面处处陷阱!!!

抱歉!评论已关闭.