学了编程三天,我不想坚持了

thbcm阅读(202)

最近再次又开始啃W3Cschool的Python教程了,看了大概三分之一,没过三天,突然学不下去了,感觉太累,不想坚持了。想学Python是因为可以做爬虫,觉得比较好玩,坚持不下去怎么办?

后来我发现,很多人都是这样的不管学什么东西,明明脑袋里很兴奋,也知道要学习补充知识了,可真的动手了,没两天就放弃,来来回回几十次,就学了点皮毛,丝毫没有任何的进步。

似乎,我们都是“思想的巨人,行动的矮子。”

心理的防御堡垒


十年后,我发明了一种编程语言,一统江湖,超越了C语言,干掉了Python,开发出了高级的人工智能程序,成为了万众敬仰的计算机科学大师。

在现实世界中,获得一种资源,都需要付出与之相等的代价。但在人类的脑海里,完全不需要。你可能只需要消耗当日进食百分之1的能量,就可以成为超人,总统,行业精英,几乎无所不能。



我们经常会在脑海里,构建自己的完美形象。学习编程,我每天学它个8小时,一个月后我就能写很多程序,一年后我便能成为一名大师级的人物,开发出一款世界级的游戏。

当理想和现实碰撞时,过高的心理预期,会让自己难以高攀,我们就会倾向于放弃。

心理学这样解释“放弃”这一行为:

防御属于一种自我防御机制,为了降低失败对人生价值的打击,我们会选择降低自己的期待,放弃自己的追求。

一旦选择了放弃,自己想要的结果便会消失,我们就很自然的将这件事归咎于自己没去做,而不是个人能力的问题。



心理预期过高,放弃就成了习惯。我想,如果立足于当下,不对未来过度的憧憬,这一现象也会得到遏制。

不是真的累

在《人性的弱点》一书中,提到过这么一个观点,即大多数脑力工作者所产生的疲劳,不是真的疲劳,而是因为心理因素引起的。



精神病理学家证明了,大多数疲劳现象来源于精神或情绪状态。厌烦、不满、觉得自己无用、匆忙、焦虑、忧烦等等。这些因素会消耗掉人的所有精力。

情绪在体内制造紧张的因素,让我们感觉到了累。

这就是为什么有些人能连续学习七八个小时,丝毫不会觉得累,而你刚打开教程手册没几分钟,就哈欠连连的内在原因。

小时候父母经常指责我,你看看别人,学习那么刻苦,你就整天想着玩,现在不吃苦,以后能有什么出息。

这便是促使你感觉到累的外在原因。全世界的人基本上都相信,学习、工作的成功与否,取决于你是否有一种努力、辛劳的感觉。如果没有这一种感觉,就是不认真学习,不努力工作。

于是,当我们在学习编程的时候,总是皱着眉头,紧绷着脸,看着一句一句的语法,审视着每一行代码实例,我们需要做出十分努力的动作,来获得这么一种满足感。

这个问题相当严重。当我意识到时,我便开始有意识的放松自己,尤其在学编程的时候。我在便签上写下“放松”二字,贴在自己的电脑屏幕下方,时刻警醒自己。

假装感兴趣

一个年轻小伙子看上了一个小姑娘,可是每每和她聊天,这位小姑娘总是一副爱答不理的样子,让小伙子郁闷不已。直到后来,他请教了一位恋爱情感专家才明白症结所在,自己总喜欢聊自己感兴趣的话题,而忽略了他人的感受。

于是,他开始学会了倾听,即便小姑娘经常聊到化妆、购物这一类他完全不感兴趣的话题时,他也假装十分感兴趣的样子倾听着。没过多久,便赢得了小姑娘的好感。

这就是“假装”的力量。

每当我问一些经验十足的程序员朋友,学编程最重要的是什么,他们都会一致的告诉我:“兴趣很重要,没兴趣别学编程。”可是我对编程的兴趣,并没有很高,至少抵不上我玩游戏、看电影的兴趣。我该怎么提高对编程的兴趣呢?

通过编程获得成就感、一个浓厚的编程学习氛围等等,都能让一个人对编程产生兴趣。遗憾的是,大部分人都懒。

假装感兴趣,就是一个不错的选择。当我们假装对编程感兴趣时,一点点的努力,就会使你的兴趣编程真实的,而且可以降低累的感觉以及紧张感。




假装感兴趣,就会想着怎么把编程学好,想着怎么把编程学好,就更容易学会,学会了就会有成就感,而成就感会继续产生兴趣,如此良性循环。

这个20小时学习编程的方法,我没告诉你

thbcm阅读(205)

古语云:欲速则不达。对于编程初学者而言,心态太过急躁,反而越容易丧失信心,放弃学习。格拉德维尔在《异类》一书中更是提出,一个人要成为某一行业的精英,至少需要10000小时的时间。

但Josh Kaufman却认为,你想掌握一项技能,只需要20小时就够了。

难熬的20个小时

Josh Kaufman这样阐述他的观点:

如果我们能在最初的20小时内,熬过初学阶段的不适感和挫败感,我们其实能很轻松的掌握一个全新领域的技能。



20小时有多长,每天花两个小时学习,只需要十天的时间,就可以掌握一项新技能,这一规则适用于任何技能,学习编程也不例外。

看似做起来一点也不难,20小时嘛,也就是不到一天的时间,但20小时想要学成某一技能的前提是,持续的高效率学习,这一点就很难办了,就算是经过刻意练习的高手,每一次进入学习状态,也只能保持1-1.5个小时专注且高效的学习状态。对于普通人来说,这更是望尘莫及。

这还不算刚学时,出现的不适感和挫败感的影响。20小时高效的学习,真不是一件简单的事情。

学习要有仪式感

那么,Josh Kaufman所说的“20小时定律”,我们该如何应用到学习编程的过程中呢?我们又该如何保证自己的学习过程,一直是最高效率的呢?

健身这一行当中,有一个很特别的派系,他们被称为“器材党”。什么是器材党呢?简单的说,就是没有健身器材就不想锻炼的一群人。跑个步,没跑步机不想跑,就算是到公园跑路,也要有耳机、手环、跑鞋、运动衣裤一系列设备。



尽管很多人都在鄙视器材党,认为太过花里胡哨,整天迷恋那些健身器材和设备,却忽略了健身的本质,其实不然。

当器材党们穿上运动裤、戴上耳机手环的时候,会有一种特别想跑步的冲动,他会想着如何规范的做热身运动,如何让自己更跑得更科学,效果更好。而没有任何设备的跑步者,这些意识往往比器材党们弱。

这些运动设备,就是跑步的仪式感,它们会给主人一种强烈的心理暗示,将主人的专注力、反应能力、运动能力提升到一个较高的水平。

在报纸还十分流行的年代,父辈在看报的时候,总喜欢冲一杯咖啡或者泡一杯茶,有的还喜欢躺在摇椅上,或者翘起二郎腿,悠闲地翻看着报纸。为什么看个报纸也要有这么强的仪式感?



看报纸是为了娱乐,而无论喝茶还是躺摇椅,都能强化这一目的。

同样,学习也需要仪式感,我们需要来强化学习的这一目的,让自己更加专注的做这一件事。

那么,怎么让学习变得更有仪式感呢?

首先,必须塑造一个利于学习的环境。


美国心理学家菲利普·津巴曾做过一个实验。他让24名志愿者参与为期两周的监狱生活,一半人扮演狱警,一半人扮演囚犯。实验第一天,大家一如往常,认为只是一个实验而已。但越往后,所有人都慢慢进入了状态。扮演狱警的人开始认为这些囚犯真的有罪,开始对他们使用暴力,而囚犯也开始暴动。



令人惊奇的是,等到实验结束时,他们恢复到了自己原先的身份,有些狱警和囚犯,却成了很要好的朋友。

《孙子兵法》多次提到如何借助环境取得胜利,孟母为了孟子能得到一个良好的教育环境,不惜三次搬迁。无数的事实都在告诉我们,环境对一个人的成长,有多么重要。

所以,现在请将你学习的地方好好整理一番,桌子摆上几本书,放上一本笔记本和一支水笔,最后再准备一个杯子,让手机、耳机这类与学习无关的东西,统统远离书桌。

营造出一个浓厚的学习环境,可以帮助你更快的进入学习状态。

其次,打一套太极拳,这并不是在开玩笑。




尽管整个学习过程中,绝大多数人都会产生精神疲劳,但因为久坐的关系,也会产生少量的身体疲劳。所以在学习前,缓慢的运动可以推迟身体疲劳的产生。

美国著名精神病理学佳布利尔证明了,健康状况良好,经常坐着工作的人,他们产生的疲劳,百分百是由心理因素引起的。

长时间学习,并不会产生真正的疲劳,而是由于自己的情绪开始慢慢发生改变,开始产生烦躁、厌倦、焦虑等负面情绪引起的。所以,精神疲劳是可以自我调整的,而身体疲劳,却只能由时间恢复。

这就是为什么W3Cschool建议在学习前,舒展筋骨的原因。但这里面也有一些禁忌,你可以打一套太极拳,也可以做一些舒缓的动作,严谨打降龙十八掌和乾坤大挪移,大量的能量消耗,会产生身体疲劳,估计还没刚开始学习,就已经想到卧室里躺尸了,又怎么可能有利于学习呢?

最后一步,花上两分钟的时间静坐。




静坐需闭上双眼,且心无杂念,什么事都不干,什么声音都不听。用两分钟的时间,感受一下时间的流逝,这两分钟将会无比的漫长,以至于会让自己无比的期待真正学习的开始。

完成以上三步,仪式感已经建立了。

20小时学的是什么

网上流传着一张图,讽刺那些妄想在很短时间内,精通编程的人。



21天都不能完全掌握C++,那20小时是如何做到的呢?

W3Cschool一直在倡导和建立一种健康积极的学习方式,反对浮躁和速成。说到这里,一定有人很疑惑:“你们家的微课,学起来很快啊,难道不是速成?”



一个必须解决的问题,出现了。速成的速度很快,高效也会让学习的速度加快,如何区分两者?

这个问题并不难回答,如果学习成果与目标相符,那么这个工具、学习方法就是高效的,如果与目标一致,但往后你还需要费心费力的去重新学习已经掌握的知识,那便是速成。

W3Cschool的微课便是奔着高效的学习去的,当然我们现在还做得不够好。为此,我们在5月份启动了“微课重造计划”,将实战引入微课,并且做大量的优化工作,完善课程和新增课程。

与上面的例子相似,21天精通C++与20个小时学会编程,前者追求速成,后者则是追求高效。

而且两者的目标也并不一致,前者追求达到精通的地步,而后者是达到入门的级别。

Josh Kaufman认为,在一个人进入一个全新的领域时,最难渡过的便是前20小时的学习过程。在这一过程中,他必须面对扑面而来的不适感,以及挫败感,这些负面情绪,很容易让人产生厌烦和放弃,如果我们能尽可能的缩短这一过程,在这一过程中,尽可能的掌握更多的知识,对今后的学习十分有利。

修复了一个bug

前文我们提过,精神疲劳是高效学习的一大杀手,我们渴望学习,却没过一会儿就会产生疲劳感,这就像是一个程序员写了几个月的程序,期待它能运行起来时,却因为一个bug,导致整个程序无法运行。

这个bug是一定要被修复的。



日本作家村上春树已经坚持跑步几十年了,这让很多人都疑惑不解,为什么自己跑步总是三天打鱼两天晒网,每次坚持个把月就选择了放弃?

这便是高手和普通人的区别。

村上春树坚持了几十年,无一例外的,每一次跑步,他总是在自我感觉良好的时候结束,这让他对第二天的跑步充满着期待。



而普通人的跑步呢?今天兴致勃勃的开始跑步,跑到感觉很累了才结束,第二天跑步前就心生畏惧,还是很累的时候才结束,如此恶性循环。于是,心里开始产生精神疲劳,每次想到跑步,都倍感压力,自然坚持不了多久。

人,是一种喜欢舒适的生物。

学习编程如是。当我们学到一个十分难的知识点时,想破了脑袋也无法解决时,就想着,算了,明天再学吧。第二天,刚开始学习,难题又摆在眼前,学了一两个小时,难题又出现了,最后还是想,算了,还是明天再学吧。

精神疲劳便产生了,大脑开始认为,学习编程是一件很累人的事,渐渐地就趋势身体,不要去碰它。

学习编程,应该给大脑留下一个好的印象。在我们完成规定的任务量时,在自我感觉良好时,主动的结束本日的学习,就会让大脑产生愉悦感。第二天,这种愉悦感会接着来,最后再以同样的方式结束学习。这时你的大脑觉得,学习编程会让自己感到高兴,自然而然的更愿意坚持下去。

高效学习345

学习要有仪式感、让大脑充满愉悦感,都能让学习变得高效。高效的学习同样离不开以下几点。

不是“把学的东西用起来”,而是“为了用而学。”


早期智人发现火可以让食物易于咀嚼,而且会变得更美味,所以才费尽心思想要保存火,这才有了后来的砖木取火;

因为战争需要,奥本海默才研制出了原子弹;

假如反过来,智人学会砖木取火,才发现它可以使食物变美味,奥本海默研制出了原子弹,才发现它可以用于战争,这是无法想象的。




永远不要把学习本身当做目标,学习只是为了让自己能做某件事。


多次回忆,重复复述


著名的费曼学习法认为,如果你能将所学的知识,讲述给一个小白听,他如果听得懂,就证明你学会了。有研究表明,在学习后,大脑会在很短的时间内,遗忘掉70%的内容,多次回忆会不断的强化大脑记忆。

学习了一个for循环,试着讲给你的朋友听,如果他听懂了,就证明自己学会了,如果身边没有朋友在学编程,也可以讲给自己听,看看这样的描述,自己是否能听懂。

闲暇时间,回忆一下自己所学到的知识,同样能巩固记忆。

找一个或一群志同道合的朋友一起学习

社会发展理论认为,合作是一种有效的学习方法。他会给你施加无形的竞争压力,督促你更加努力的学习。而当你学有所成时,又可以向他人炫耀,增加成就感。

文末,W3Cschool真心希望,无论现在你是在学习编程,还是在学习其他知识,都能坚持下去,摘取胜利的果实。

HTML编辑器有哪些,HTML编辑器推荐

thbcm阅读(189)

对于很多初学者来说,一款好用的 HTML 编辑器是相当重要的。编辑器在前期可以帮我们快速的熟悉 HTML 代码,更快的上手,当我们能独立用记事本完成一个网页的制作,那么就说明我们学会 HTML 了。

1,打开记事本–新建文档

2,在记事本写上以下代码

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML编辑器有哪些,HTML编辑器下载(w3cschool.cn)</title>
</head>
<body>
    <h1>第一级标题</h1>
    <h2>第二级标题</h2>
    <h3>第三级标题</h3>
    <p>段落测试文字</p>
</body>
</html>

3,点击记事本左上角–文件另存为 文件保存为(文件名+.html

4,双击打开此文件,结果如下图所示:

那么HTML编辑器都有哪些呢?

1、HBuilder

HBuilder 是 DCloud 推出的一款支持 HTML5 的 Web 开发 IDE。 HBuilder 的编写用到了 Java、 C、 Web和Ruby。 HBuilder 本身主体是由 Java 编写的。速度快,是 HBuilder 的最大优势,通过完整的语法提示和代码输入法、代码块等,大幅提升 HTML、 js、 css 的开发效率。 Hbuilder 是由有我国的前端开发人员编写的一款前端开发 IDE ,所以在使用上比较符合我们中国人的开发习惯,用 HBuilder 写 HTML 代码还是很方便的。

2、Adobe Dreamweaver CS

dreamweaver cs6 是世界顶级软件厂商 adobe 推出的一套拥有可视化编辑界面,可用于编辑网站和移动应用程序的代码编辑器。由于它支持代码、拆分、设计、实时视图等多种方式来创作、编写和修改网页,对于初级人员,你可以无需编写任何代码就能快速创建 web 页面。其成熟的代码编辑工具更适用于 web 开发高级人员的创作!cs6 新版本使用了自适应网格版面创建页面,在发布前使用多屏幕预览审阅设计,可大大提高工作效率。所以 Adobe Dreamweaver CS 也是一个比较好的HTML代码编辑器。

3、SublimeText3

Sublime Text 是一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受。相比于难于上手的 Vim, 浮肿沉重的 Eclipse, VS, 即便体积轻巧迅速启动的 Editplus、 Notepad++, 在 SublimeText 面前大略显失色,无疑这款性感无比的编辑器是 coding 的不错的选择。

4、Notepad

Notepad++ 是旨在替代 Windows 默认的 notepad 而生,比 notepad 的功能强大很多很多。 notepad++ 支持插件,添加对应不同的插件,以支持不同的功能。里面除了一些常见的插件之外,还有一些好玩的插件,比如将文字读出来的 speech 插件。 Notepad++ 属于轻量级的文本编辑类软件,比其他一些专业的文本编辑类工具,启动更快,占用资源更少,但是从功能使用等方面来说,不亚于那些专业工具。

5、EditPlus(文本编辑器)

EditPlus (文字编辑器)一套功能强大,可取代记事本的文字编辑器,拥有无限制的 Undo/ Redo、 英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于剪贴簿自动将文字贴进 EditPlus 的编辑窗口中,让你省去做贴上的步骤。另外它也是一个好用的 HTML 编辑器,除了可以颜色标记 HTML Tag (同时支持 C/C++、 Perl、 Java )外,还内建完整的 HTML 和 CSS1 指令功能,对于习惯用记事本编辑网页的朋友,它可帮你节省一半以上的网页制作时间,若你有安装 IE 3.0 以上版本,它还会结合 IE 浏览器于 EditPlus 窗口中,让你可以直接预览编辑好的网页(若没安装 IE,也可指定浏览器路径)。  EditPlus3 编辑器下载: https://www.w3cschool.cn/editplus3/

有了一个好用的编辑器,那么接下来就可以好好的学习HTML基础教程了 https://www.w3cschool.cn/html/ “HTML教程阅读”

也有更加深入的课程讲解视频:https://www.w3cschool.cn/minicourse/play/htmlcourse “HTML微课(含HTML5)”

以上就是编程狮给大家提供的关于 HTML 编辑器的推荐,以及 HTML 的学习,希望能给大家带来帮助。

什么是微信小程序,微信小程序有什么用

thbcm阅读(204)

什么是微信小程序

小程序是微信里面的一个应用,它可以直接打开使用而不需要下载安装。它让应用变得更加便捷化,触手可及。用户搜一搜名字或者扫一扫二维码即可进入应用。用完即走,没有任何残留,使用户无需考虑应用的安装卸载以及内存空间问题。

微信小程序的功能

分享便捷:小程序可以直接分享到对话中,支持单人,微信群,群发。

可搜索性:在微信添加好友中,可通过直接搜索小程序名称进入小程序。

关联性:小程序可以与公众号相关联。

扫码进入:用户可以直接通过扫描二维码进入小程序,对店长相当有利。

小程序切换:用户可随时任意切换不同的小程序。

消息通知:商家可以给使用过的用户发送消息,用户也可以反馈问题。

历史列表:使用过的小程序会被放入一个列表,方便下次使用,寻找之前用过的小程序。

微信小程序的优点

小程序使用起来相当简单,无需下载安装。

在APP上能做的事情,小程序基本也行。

开发成本也比APP,公众号低。

由于是微信的产品,现在微信用户那么多,有相当大的潜力待开发。

线上小程序与线下实体店相结合可以带来更多的流量。

如何制作微信小程序

了解了什么是微信小程序后,那么该怎么制作微信小程序呢?

欢迎打开微信小程序开发文档:https://www.w3cschool.cn/weixinapp/

如果你觉得单纯的文档无法理解透彻,或者还需更加详细的教程

欢迎进入微信小程序微课:https://www.w3cschool.cn/minicourse/play/wxadoccourse

微信小程序开发难吗,如何快速开发微信小程序

thbcm阅读(184)

微信小程序开发难吗?

微信小程序开发难不难,取决于你对小程序功能的需求多不多,内容丰富性如何。内容跟功能越多就越难。如果你自己会编程,懂代码,那么就可以自己去开发,难度并不大。在这之前你可以了解一下”什么是微信小程序

那么该如何快速的开发微信小程序呢

假如你不会编程,那么你可以寻找小程序开发公司帮你完成。在这之前你应该知道自己需要什么样的小程序,将功能需求整理成一份文案,在开发过程中就不要频繁修改需求了。 在选择公司过程中,应该考虑这家公司是否有丰富的小程序开发经验,该公司的技术人员多不多,这可能会影响到你的售后服务。因为一款小程序开发出来后,你后续可能还会添加修改功能,所以售后服务就显得相当重要。

如果你不想借助外包公司,而是选择自己开发微信小程序, 那么请打开微信小程序开发文档

如果你觉得纯文档无法充分理解,或者还需更加详细的教程 欢迎进入微信小程序微课

跟面试官聊了半个小时的HashMap

thbcm阅读(192)

HashMap包含的知识点很多,很适合用来考察面试者的Java基础,所以这算是Java面试的一个必问题目吧。

场景扮演

面试官: 你先自我介绍一下吧!

安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目前在–公司做–系统开发。

面试官: 看你简历上写熟悉Java集合,HashMap用过的吧?

安琪拉: 用过的。(还是熟悉的味道)

面试官: 那你跟我讲讲HashMap的内部数据结构?

安琪拉: 目前我用的是JDK1.8版本的,内部使用数组 + 链表 / 红黑树;

安琪拉: 方便我给您画个数据结构图吧:

面试官: 那你清楚HashMap的数据插入原理吗?

安琪拉: 呃[做沉思状]。我觉得还是应该画个图比较清楚,如下:

1.判断数组是否为空,为空进行初始化;

2.不为空,计算 k 的 hash 值,通过 (n – 1) & hash计算应当存放在数组中的下标 index ;

3.查看 table[index] 是否存在数据,没有数据就构造一个Node节点存放在 table[index] 中;

4.存在数据,说明发生了hash冲突, 继续判断key是否相等,相等,用新的value替换原数据(onlyIfAbsent为false);

5.如果不相等,判断当前节点类型是不是树型节点,如果是树型节点,创建树型节点插入红黑树中;

6.如果不是树型节点,创建普通Node加入链表中;判断链表长度是否大于 8, 大于的话链表转换为红黑树;

7.插入完成之后判断当前节点数是否大于阈值,如果大于开始扩容为原数组的二倍。

面试官: 刚才你提到HashMap的初始化,那HashMap怎么设定初始容量大小的吗?

安琪拉: [这也算问题??] 一般如果new HashMap() 不传值,默认大小是16,负载因子是0.75, 如果自己传入初始大小k,初始化大小为 大于k的 2的整数次方,例如如果传10,大小为16。(补充说明:实现代码如下)

static final int tableSizeFor(int cap) {  
  int n = cap - 1;  
  n |= n >>> 1;  
  n |= n >>> 2;  
  n |= n >>> 4;  
  n |= n >>> 8;  
  n |= n >>> 16;  
  return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;  
} 

补充说明:下图是详细过程,算法就是让初始二进制分别右移1,2,4,8,16位,与自己异或,把高位第一个为1的数通过不断右移,把高位为1的后面全变为1,111111 + 1 = 1000000 = (符合大于50并且是2的整数次幂 )

面试官: 你提到hash函数,你知道HashMap的哈希函数怎么设计的吗?

安琪拉: [问的还挺细] hash函数是先拿到通过key 的hashcode,是32位的int值,然后让hashcode的高16位和低16位进行异或操作。

面试官: 那你知道为什么这么设计吗?

安琪拉: [这也要问],这个也叫扰动函数,这么设计有二点原因:

一定要尽可能降低hash碰撞,越分散越好; 算法一定要尽可能高效,因为这是高频操作, 因此采用位运算; 面试官: 为什么采用hashcode的高16位和低16位异或能降低hash碰撞?hash函数能不能直接用key的hashcode?

[这问题有点刁钻], 安琪拉差点原地爆炸了,恨不得出biubiubiu 二一三连招。

安琪拉: 因为 key.hashCode() 函数调用的是key键值类型自带的哈希函数,返回int型散列值。int值范围为-2147483648~2147483647,前后加起来大概40亿的映射空间。只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40亿长度的数组,内存是放不下的。你想,如果HashMap数组的初始大小才16,用之前需要对数组的长度取模运算,得到的余数才能用来访问数组下标。

源码中模运算就是把散列值和数组长度-1做一个”与”操作,位运算比%运算要快。

bucketIndex = indexFor(hash, table.length);  
static int indexFor(int h, int length) {  
return h & (length-1);  
} 

顺便说一下,这也正好解释了为什么HashMap的数组长度要取2的整数幂。因为这样(数组长度-1)正好相当于一个“低位掩码”。“与”操作的结果就是散列值的高位全部归零,只保留低位值,用来做数组下标访问。以初始长度16为例,16-1=15。2进制表示是00000000 00000000 00001111。和某散列值做“与”操作如下,结果就是截取了最低的四位值。

10100101 11000100 00100101  
& 00000000 00000000 00001111  
----------------------------------  
  00000000 00000000 00000101    //高位全部归零,只保留末四位 

但这时候问题就来了,这样就算我的散列值分布再松散,要是只取最后几位的话,碰撞也会很严重。更要命的是如果散列本身做得不好,分布上成等差数列的漏洞,如果正好让最后几个低位呈现规律性重复,就无比蛋疼。

这时候 hash 函数(“扰动函数”)的价值就体现出来了,说到这里大家应该猜出来了。看下面这个图,

右位移16位,正好是32bit的一半,自己的高半区和低半区做异或,就是为了混合原始哈希码的高位和低位,以此来加大低位的随机性。而且混合后的低位掺杂了高位的部分特征,这样高位的信息也被变相保留下来。

最后我们来看一下Peter Lawley的一篇专栏文章《An introduction to optimising a hashing strategy》里的的一个实验:他随机选取了352个字符串,在他们散列值完全没有冲突的前提下,对它们做低位掩码,取数组下标。

结果显示,当HashMap数组长度为512的时候(),也就是用掩码取低9位的时候,在没有扰动函数的情况下,发生了103次碰撞,接近30%。而在使用了扰动函数之后只有92次碰撞。碰撞减少了将近10%。看来扰动函数确实还是有功效的。

另外Java1.8相比1.7做了调整,1.7做了四次移位和四次异或,但明显Java 8觉得扰动做一次就够了,做4次的话,多了可能边际效用也不大,所谓为了效率考虑就改成一次了。

下面是1.7的hash代码:

static int hash(int h) {  
    h ^= (h >>> 20) ^ (h >>> 12);  
    return h ^ (h >>> 7) ^ (h >>> 4);  
} 

面试官: 看来做过功课,有点料啊!是不是偷偷看了安琪拉的博客公众号, 你刚刚说到1.8对hash函数做了优化,1.8还有别的优化吗?

安琪拉: 1.8还有三点主要的优化:

1.数组+链表改成了数组+链表或红黑树;

2.链表的插入方式从头插法改成了尾插法,简单说就是插入时,如果数组位置上已经有元素,1.7将新元素放到数组中,原始节点作为新节点的后继节点,1.8遍历链表,将元素放置到链表的最后;

3.扩容的时候1.7需要对原数组中的元素进行重新hash定位在新数组的位置,1.8采用更简单的判断逻辑,位置不变或索引+旧容量大小;

4.在插入时,1.7先判断是否需要扩容,再插入,1.8先进行插入,插入完成再判断是否需要扩容; 面试官: 你分别跟我讲讲为什么要做这几点优化;

安琪拉: 【咳咳,果然是连环炮】

1.防止发生hash冲突,链表长度过长,将时间复杂度由O(n)降为O(logn);

2.因为1.7头插法扩容时,头插法会使链表发生反转,多线程环境下会产生环;

A线程在插入节点B,B线程也在插入,遇到容量不够开始扩容,重新hash,放置元素,采用头插法,后遍历到的B节点放入了头部,这样形成了环,如下图所示:

1.7的扩容调用transfer代码,如下所示:

void transfer(Entry[] newTable, boolean rehash) {  
  int newCapacity = newTable.length;  
  for (Entry<K,V> e : table) {  
    while(null != e) {  
      Entry<K,V> next = e.next;  
      if (rehash) {  
        e.hash = null == e.key ? 0 : hash(e.key);  
      }  
      int i = indexFor(e.hash, newCapacity);  
      e.next = newTable[i]; //A线程如果执行到这一行挂起,B线程开始进行扩容  
      newTable[i] = e;  
      e = next;  
    }  
  }  
} 

3.扩容的时候为什么1.8 不用重新hash就可以直接定位原节点在新数据的位置呢?

这是由于扩容是扩大为原数组大小的2倍,用于计算数组位置的掩码仅仅只是高位多了一个1,举个例子:扩容前长度为16,用于计算 (n-1) & hash 的二进制n – 1为0000 1111,

扩容后为32后的二进制就高位多了1,============>为0001 1111。

4.因为是& 运算,1和任何数 & 都是它本身,那就分二种情况,如下图:原数据hashcode高位第4位为0和高位为1的情况;

第四位高位为0,重新hash数值不变,第四位为1,重新hash数值比原来大16(旧数组的容量)

面试官: 那HashMap是线程安全的吗?

安琪拉: 不是,在多线程环境下,1.7 会产生死循环、数据丢失、数据覆盖的问题,1.8 中会有数据覆盖的问题。

以1.8为例,当A线程执行到下面代码第6行判断index位置为空后正好挂起,B线程开始执行第7 行,往index位置的写入节点数据,这时A线程恢复现场,执行赋值操作,就把A线程的数据给覆盖了;

还有第38行++size这个地方也会造成多线程同时扩容等问题。

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,  
               boolean evict) {  
  Node<K,V>[] tab; Node<K,V> p; int n, i;  
  if ((tab = table) == null || (n = tab.length) == 0)  
    n = (tab = resize()).length;  
  if ((p = tab[i = (n - 1) & hash]) == null)  //多线程执行到这里  
    tab[i] = newNode(hash, key, value, null);  
  else {  
    Node<K,V> e; K k;  
    if (p.hash == hash &&  
        ((k = p.key) == key || (key != null && key.equals(k))))  
      e = p;  
    else if (p instanceof TreeNode)  
      e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);  
    else {  
      for (int binCount = 0; ; ++binCount) {  
        if ((e = p.next) == null) {  
          p.next = newNode(hash, key, value, null);  
          if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st  
            treeifyBin(tab, hash);  
          break;  
        }  
        if (e.hash == hash &&  
            ((k = e.key) == key || (key != null && key.equals(k))))  
          break; 
         p = e;  
      }  
    }  
    if (e != null) { // existing mapping for key  
      V oldValue = e.value;  
      if (!onlyIfAbsent || oldValue == null)  
        e.value = value;  
      afterNodeAccess(e);  
      return oldValue;  
    }  
  }  
  ++modCount;  
  if (++size > threshold) // 多个线程走到这,可能重复resize()  
    resize();  
  afterNodeInsertion(evict); 
   return null;  
}

面试官: 那你平常怎么解决这个线程不安全的问题?

安琪拉: Java中有HashTable、Collections.synchronizedMap、以及ConcurrentHashMap可以实现线程安全的Map。

HashTable是直接在操作方法上加synchronized关键字,锁住整个数组,粒度比较大; Collections.synchronizedMap是使用Collections集合工具的内部类,通过传入Map封装出一个SynchronizedMap对象,内部定义了一个对象锁,方法内通过对象锁实现; ConcurrentHashMap使用分段锁,降低了锁粒度,让并发度大大提高。 面试官: 那你知道ConcurrentHashMap的分段锁的实现原理吗?

安琪拉: 【天啦撸! 俄罗斯套娃,一个套一个】ConcurrentHashMap成员变量使用volatile 修饰,免除了指令重排序,同时保证内存可见性,另外使用CAS操作和synchronized结合实现赋值操作,多线程操作只会锁住当前操作索引的节点。

如下图,线程A锁住A节点所在链表,线程B锁住B节点所在链表,操作互不干涉。

面试官: 你前面提到链表转红黑树是链表长度达到阈值,这个阈值是多少?

安琪拉: 阈值是8,红黑树转链表阈值为6

面试官: 为什么是8,不是16,32甚至是7 ?又为什么红黑树转链表的阈值是6,不是8了呢?

安琪拉: 【你去问作者啊!天啦撸,biubiubiu 真想213连招】

因为作者就这么设计的,哦,不对,因为经过计算,在hash函数设计合理的情况下,发生hash碰撞8次的几率为百万分之6,概率说话。。因为8够用了,至于为什么转回来是6,因为如果hash碰撞次数在8附近徘徊,会一直发生链表和红黑树的转化,为了预防这种情况的发生。

面试官: HashMap内部节点是有序的吗?

安琪拉: 是无序的,根据hash值随机插入

面试官: 那有没有有序的Map?

安琪拉: LinkedHashMap 和 TreeMap

面试官: 跟我讲讲LinkedHashMap怎么实现有序的?

安琪拉: LinkedHashMap内部维护了一个单链表,有头尾节点,同时LinkedHashMap节点Entry内部除了继承HashMap的Node属性,还有before 和 after用于标识前置节点和后置节点。可以实现按插入的顺序或访问顺序排序。

/**  
 * The head (eldest) of the doubly linked list.  
*/  
transient LinkedHashMap.Entry<K,V> head;  
/**  
  * The tail (youngest) of the doubly linked list.  
*/  
transient LinkedHashMap.Entry<K,V> tail;  
//链接新加入的p节点到链表后端  
private void linkNodeLast(LinkedHashMap.Entry<K,V> p) {  
  LinkedHashMap.Entry<K,V> last = tail;  
  tail = p;  
  if (last == null)  
    head = p;  
  else {  
    p.before = last;  
    last.after = p;  
  }  
}  
//LinkedHashMap的节点类  
static class Entry<K,V> extends HashMap.Node<K,V> {  
  Entry<K,V> before, after;  
  Entry(int hash, K key, V value, Node<K,V> next) {  
    super(hash, key, value, next);  
  }  
} 

示例代码:

public static void main(String[] args) {  
    Map<String, String> map = new LinkedHashMap<String, String>();  
    map.put("1", "安琪拉");  
    map.put("2", "的");  
    map.put("3", "博客");  
    for(Map.Entry<String,String> item: map.entrySet()){    System.out.println(item.getKey() + ":" + item.getValue());  
                                                      }
}
//console输出1:安琪拉2:的3:博客 

面试官: 跟我讲讲TreeMap怎么实现有序的?

安琪拉:TreeMap是按照Key的自然顺序或者Comprator的顺序进行排序,内部是通过红黑树来实现。所以要么key所属的类实现Comparable接口,或者自定义一个实现了Comparator接口的比较器,传给TreeMap用户key的比较。

面试官: 前面提到通过CAS 和 synchronized结合实现锁粒度的降低,你能给我讲讲CAS 的实现以及synchronized的实现原理吗?

安琪拉: 下一期咋们再约时间,OK?

面试官: 好吧,回去等通知吧!

互联网为何越来越不受中国家长“待见”

thbcm阅读(194)

青少年,整个时代呵护的花朵

“青少年是祖国未来的花朵”,在中国家长心里,孩子的地位高于一切,社会的目光也一直聚焦在青少年身上,发生在青少年身上的任意一件事,都会引发放大效应,引起全社会的关注。

而前段时间,根据家长举报,“学而思网校”APP 存在低俗视频、教唆早恋等内容。网信办也因此约谈了相关负责人。

学而思对此回应称,经过调查,以上视频的发布系用户个人行为,现学而思已经进行更改并加大了内容审核力度,用户上传视频需人工审核并只用户自己可见。

从国漫举报的浪潮,到频频出现的游戏充值纠纷,再到此次学而思被指控的早恋门事件。中国家长频频发声的背后,既是在表达自己担忧的情绪,也是对互联网时代的一切投去质疑的眼光。

取悦了一个时代的互联网,好像很难取悦中国家长。

从谈性色变再到谈网色变

如果说有什么疑惑是 90 后集体的时代记忆,那么“我从哪里来?”绝对可以被列入其中。

据中国教育科学研究院教育科技研发中心 2 万份的调查显示,有 27% 的中国家长从未向子女进行过任何有关“性”的教育,其中包括最基础的“性别认知教育”。

值得深思的数据背后,是中国家长对于“性”的难以启齿,以至于 90 后关于自己最初的生命起源,会是各种无厘头的答案。

那么 00 后的性教育如何呢? 2019 年,一份对北师大在校生的性行为调查问卷显示,有接近 45% 的 18 级本科学生(00 后)没有接受过任何正规的性教育。北师大尚且如此,其余大学可见一斑。

在性教育中,除了最直接的亲密关系,情感的萌芽也是中国家长最为担忧的情况之一。是否会有喜欢的异性?是否会出现早恋?是否会因为学习之外乱七八杂的情感问题耽误成绩?这种“泛性化”的外延也是中国家长们关心的所在。

在中国,性一直都是一个禁忌的话题,这种文化现象好像并不区分年龄。而如今互联网的普及,更是令中国家长逐渐由“谈性色变”过渡为“谈网色变”。

“现在互联网信息太杂了,有些信息真的不适合孩子们接触。”这种观念,逐渐成为了中国家长的一种共识。

根据一份社会调查显示,有接近 76% 的 00 后发生过被父母查询手机、偷看日记等情况,中国家长用“极致”的关心与各类信息作斗争。可实际上,不论是性侵案件还是青少年的堕胎率,并没有因为中国家长追求极致的行为而有所下降。

从童年爱情剧中男女主角接吻时妈妈贴心的“跳台”,到路过街边成人用品商店时的步履匆匆,再到如今疯狂查看自家孩子的浏览记录和日记,中国家长试图为孩子们打造一个绝对的“乌托邦”来捍卫环境的纯净。

如今,各种网络弹窗屡禁不断,也有过多起因网络弹窗浏览非法网站导致儿童心灵受到伤害的事件,中国家长因此对网络报以谨慎的态度无可厚非。国家与社会同样也应该为此整顿网络环境。

但信息时代,互联网的使用是无法被越过的生活场景。中国家长在讨论互联网的同时,不应该只是诉求于国家社会力量的单纯依赖,还应该思考家庭是否能够给予预防或事后的补救。

单纯的痛骂或抵制可能会起一时之效,但不健康的信息始终会“春风吹又生”。孩子的成长就如同西游记里的西天取经,唐僧取的是人间最真最纯的佛经,却仍需跨过各路妖魔鬼怪的九九八十一难。

要求满天神佛看管好自家的“孽畜”,在西游记的世界里只会是天方夜谭,而孙悟空事前的善意告知和事后不放弃的积极补救,才是保障唐三藏不受侵染取得真经的正确法门。

中国家长更需要被“安慰”

“虹猫蓝兔七侠传太血腥,该禁!东方神娃女妖怪衣着暴露,该禁!我为歌狂诱导早恋,该禁!”中国家长的诉求一一得到了满足。

此后,这种满足也因为极高的安慰感逐渐扩展到其它领域。“心中有什么,便见一切都如此。”,中国家长披上战袍开始在互联网四处征战,最后每每都能凯旋而归。

不可否认的是,当下中国在“开童车”事件上的翻车率正越来越高,除去较为特殊的被媒体与社会聚焦的儿童性侵事件之外,逐渐增高的青少年堕胎率,可能更加反映性教育缺乏这一普遍的社会现实。

根据 2018 年中国堕胎大数据显示,在要求做人流的未婚女性中,1/3 首次性行为发生在 19 岁以前,其中 8.9% 发生在中学期间,首次性行为的最小年龄只有 13 岁。

而在这些堕胎的人群中,仅有 4.4% 的未婚青少年具有正确的生殖健康知识。怀孕少女的性知识只有 2.4% 来自于父母。

这与家长们对互联网投出的反对票形成了极大的反差。

在这些堕胎数据的背后,很难追踪到互联网在背后运行的痕迹。但中国家长在性教育上的不作为却是每一起悲剧上演的开始。

从 2011 年净网行动开始,中国对于互联网的审查力度在世界范围内都首屈一指。自 2016 年更为大力度的净网投入直到现在,除去某些擦边信息的弹窗外,想要通过互联网检索到净网范围内的违规信息已经很难实现。

国家层面在积极响应中国家长诉求的同时,对于青少年大好局面的展望好像并未到来。

相反,居高不下的青少年堕胎率给了中国家长一记耳光。互联网已经不好再背这个锅了,那责任又会在谁呢?

反思中国家长征战网络的历史,它的动机与高考之时堵在十字路口拦车的行为是不同次元的同一逻辑。

不同的是,外在的车辆可以被轻易拦下,但面对复杂的青少年的内心情景,绝不是拦住网络上行驶的车辆就可以避免的。毕竟青春期的生理心理变化是青少年正常的成长路径。

“网络纯净,心里感觉踏实多了!不再担心接触到不良信息了,放心!”这是中国家长对于网络净化真实的内心写照。网络净化绝不是一件错事,但仅仅是“眼不见心不烦”,就只能是家长们“掩耳盗铃”的自嗨罢了。

“不看不听不转,举报放下随缘。”没有教育的后续与其说是“保护”,不如说这只是在安慰中国家长更为贴切。

互联网需要自省吗?

在 2018 青少年性行为的调查之中,15-17 岁青少年性行为的发生率,农村青少年是城镇青少年的两倍。深入调查后发现,城镇的父母更善于通过互联网等现代化手段向孩子普及性教育知识。

至此真相有了些许的展露,归根结底,教育才是互联网之外的答案。

中国家长对于互联网的敏感说明了“罪恶”的确蛰伏于互联网。但深入思考就可以发现,除去违法违规的信息,“男女恋爱情感”也同样充斥着诱导青少年恋爱的“罪恶”。

而供给这种“罪恶”的源泉,来自于成人群体,其中也不乏中国家长。在这种情况下,所谓的“罪恶”难以消除。它们可以在任何时候一下子蹦到青少年的眼前。

基于此,总有回避不掉的罪恶,教会孩子如何面对它们就显得尤其重要。在这一方面,中国家长需要在互联网自省的同时,也思考应该如何教育自己的孩子而不是将这一切都归咎于互联网。

在此之前,中国家长的自我教育更为迫切与关键。

2017 年,《小学生性健康教育课本》试点发放,却在互联网引发了诸多争议。很多中国家长直呼课本“辣眼睛”,并呼吁停止教材进入校园。

可实际上,这本教材的内容经过严格审核,关于性教育和有关性侵害的预防教育也十分系统而全面,如果普及开来,会是中国性教育史上有所作为的一笔。

连经过有关部门审核过的校本教材都无法被中国家长接纳,这不得不说既无奈又有些讽刺。校本教材如此,在“罪恶”面前处于守势的互联网的遭遇也就不足为奇了。

两会期间,全国政协委员许洪玲建议在社区举办“家长课堂 ”。成为父母需要“持证上岗”。虽然这种建议在实践环节存在讨论的空间,但也可以说是一种警示。

近年来激增的儿童安全事件,作为监护人的中国家长负有更大的责任,在青少年的诸多问题中,中国家长需要先突破自我的认知才能更好地教育孩子,这样才能不辜负国家与社会的严格管制与中国互联网深刻地自省。

如今南方正逢大雨,千年前的大禹治水和都江堰教会了古代劳动人民堵不如疏,希望充满自省精神的中国互联网能够让中国父母明白,把问题讲清楚说明白要比遮遮掩掩伪造一个自欺欺人的乌托邦好过无数倍。

发现问题,面对问题,解决问题,才是正确的思路。希望中国家长能更加全面的认识互联网,凡事有利有弊,不能全盘否定。

互联网公司裁员的奇葩理由

thbcm阅读(188)

在今年如此特殊的市场环境下,“活下去”成了每一个员工和老板的首要目标。让我们来听听他们的故事。

本文记录了12 位职场人士的经历,他们中有的被同一家公司连续裁员两次,有的遭遇“名单念错了”、“太瘦穿不进工作服”、“同一级别女生太多”等被裁的奇葩理由,还有一些人不满被裁,勇敢选择维权。

-连续被裁两次-

一年之内,被同一家公司裁了两次

景礼

互联网从业者 从业 5 年

我在一年半内被同一个公司裁员两次,拿了 4 个月赔偿,两次N+1 加起来有小十万块。

第一次被裁,是因为公司高层决策失误,导致业务急剧下降,业务量半年内萎缩了 60%,整个市场部都被裁掉了。那次裁员经过很快,HR 上午找我们谈完,下午就让我们走人了,工作也没有交接,钱给的也很干脆。

在我之前,公司已经裁了好几波人了,我入职的时候公司 600 多人,离开的时候基本上就剩下 200 人了。我们部门从 30 多人,裁到只剩下 10 个人,我是最后一波被裁的。我那时候还挺开心的,可以拿了补偿走人,不用跟着公司一起掉下去。

在我第一次被裁后,疯狂找工作的半个月里,公司 HR 又找到我,让我重新入职。HR 提到,公司急缺内容运营及公关方面的岗位,短时间内也找不到合适的,刚好觉得我比较了解公司业务,问我是否考虑再次入职。那个时候我还没有确定新的工作,就回去了。

半年后,疫情来袭,公司突然宣布全员降薪 20%,CEO 说,是为了做给投资人和股东看的,其实我们知道,公司账上还是有钱的,完全是为了牺牲员工利益去满足投资人。

降薪的同时,他们要求员工签字声明同意降薪。我觉得很不公平。疫情期间,我没少干活儿,凭什么要和那帮没怎么干活儿的人一起降薪,于是,我拒绝了签字的要求。没想到,HR 杀鸡儆猴,把我裁掉了。

疫情期间工作不太好找,但好在我有着不错的专业度,离职以后,我一个月内拿下了三个 offer,工资涨了 30%,感觉还挺美的。目前,我已经入职了新公司,接下来就好好加油吧。

被裁几天后,才知道名单念错了

周子涛

电商售后客服、游戏开发从业 3 年

刚进社会那两年,连续两件奇葩事发生在我身上,我觉得不会再有第二个人像我这么倒霉了。

第一次是我在一家公司做电商售后客服。有一次下班回宿舍,想洗脚,自己没准备拖鞋,看见地上有一双,但不知道是谁的,我就问大家,没有人认领,我心想,那就穿一下吧。我穿完以后,有个同事说是他的,我赶紧说对不起。

没想到第二天,这位同事就向经理告我的状,说我骂他,我说“我没骂人”,结果经理说“你还狡辩”,打了我一巴掌,把我开除了。最后他留了一句,“工资下个月 15 号来领”。我到时间去领工资,没想到人力告诉我:“你是被开除的,没有工资。”

第二次经历是在一家游戏公司做设计,薪资待遇是基本工资+项目提成。第一个月,公司考核业绩,业绩合格才能留下,不合格就走人,我接了七到八单左右。公布名单时,点到我的名字,说我业绩不合格,直接开除,那一刻我瞬间懵了。等我离开三四天后,公司联系我,说有误会,开除名单念错了。

我恍然大悟,我的名字叫周子涛,另一个同事叫刘子涛,我们两个是同学,一起应聘去的这家公司。我当时被开除、收拾东西的时候,还对他抱怨:“你太牛了,一单没接不说,天天上班打游戏都没被开除。”我还认真地问他:“你是不是有关系没告诉我?”他说他也不知道怎么回事。我们当时谁也没想到会念错名字。

经历过这些,其实我也没有太大改变,只是会自觉地少说话、多干活。

-遭遇奇葩理由-

设计师被辞退,因为只会设计不会写文案

王芳芳

互联网设计师从业 3 年

我是以设计师身份入的职。刚进公司的时候老板跟我说过一句话:你得成为设计里方案写的最好的,写方案里活动做的最好的,做活动里最懂财务的。

说白了其实就是公司小,要一人多职,不然人员利用率不高。

作为设计师我平日里活也比较多,只是最近公司丢了几个客户,设计上的任务有所减少。老板就找我谈话,想让我全面发展,学做竞品分析,跟进项目。等我写完竞品分析,老板说别人写文案 2 个小时就写好了,你为什么写 1 天。之后又说你跟进项目写方案,可一旦设计的活来了,就没有办法兼顾设计。总之就是认为我没有办法全面发展。

随后 HR 跟我闲聊,开始旁敲侧击称目前公司的设计业务也不是很多,耽误我的前程和发展等。我一开始还没理解是什么意思,结果这次谈话后不久我就接到了另一家公司的电话让我去面试。

我当时都懵了,我没有投简历也不准备跳槽,为什么有人要我去面试?老板这个时候才说公司亏损,养不起你了,你走吧。同时 HR 给我打电话,说帮我把后路想好了,“好心”帮我联系了面试。

我当时第一感觉是自己的真心错付了,一直都为公司考虑,挑起公司设计所有的活,在被辞退之前还拉来了两个大单,就因为近期设计活不多,公司就卸磨杀驴。而且公司如果想辞退我,可以直接跟我说,为什么在我不知情的情况下,还安排了另一个公司去面试。

我来公司 1 年半多,按照国家规定是赔偿 2 个月工资。一开始公司答应了,说可以接把年假休了,然而等我休完 5 天年假后发现,赔偿金里直接扣除了 4000 块钱。HR 称年假是公司的福利,我们决定了不给你年假,既然你休了年假那就要扣除。HR 一直说,差不多得了别跟公司算那么清楚,闹得不愉快了以后怎么给你背书。

经过这件事,我发现如今公司裁员的套路真是深,不强制你走,要你主动提离职走人,还以之后的工作背调为要挟。大家都不希望因为几个月的赔偿而获得不好的背调评价,很多时候也就不了了之。

怀疑公司有间谍,冲进办公室当场辞退员工

柳鹏

某互联网公司 CEO 从业 6 年

裁员这件事情,对于员工来说,肯定是要给个理由的。最多的一次,我在一周之内裁了一百多人。

裁员的方式多种多样,理由也是五花八门。有些人得我亲自去裁,有些得让 HR 去裁。当时我就跟我们 HR 说,反正分配给你这么多指标,裁员的预算也就这么多,所有人都按N+1 补偿是不可能的,你自己想办法,完不成你就把自己裁了。

当时用的最多的方式是轮岗。技术转销售,销售转行政,总之就是让部门职责对调,但考核严格执行。当然,这个都是针对那些想要裁撤的部门,不接受的员工有些自己就会离职,那些留下的会因为完不成考核被辞退。

还有就是让部门负责人去裁,他把部门里的人裁完,最后再把他裁掉。因为部门负责人有招人权限,一些部门会存在小山头现象,尤其是销售部门,都只听部门负责人的。当时有个销售总监,我让他把他手下全裁了,他不听我的,最后他一气之下带着整个部门出走了。但这正合我意,没有一个人过来要辞退补偿。

大幅裁员是因为当时公司现金流出问题了,新一轮融资没跟上,之前跑得太快,导致资金消耗太快,最后不得已收缩规模。公司很多业务都停滞了,所以当时很多员工也表示理解。

唯一当时有一个技术经理,我一度怀疑他是间谍,就他非常不配合。当时他的职责是负责保管和维护公司服务器以及一些关键数据,很多都是加密的,但他一直不做数据交接。当时也有人给我反馈,说这个人没那么简单。

那个时候公司人心惶惶,竞争对手也是虎视眈眈,我越来越觉得这个人可能想盗取公司机密。但他的岗位很特殊,没法给他调岗,劝他离职不配合,他也不要补偿金。最后没办法,有一天我直接带着两个联创,冲进办公室大发雷霆,当场拍桌子宣布让他走人,所有人都惊呆了。估计他也是被吓到了,当天就离职了,也没有要补偿,更没有起诉。

其实裁员是一个非常复杂的事情,老板要考虑很多因素,并不像很多人想象的那么简单,很多时候公司裁员,也是为了自保。

跑校区来不及做课前服务

家长投诉后被辞退

杨昕

在线教育双师辅导老师从业 1 年

当双师辅导老师完全是机缘巧合,当时我应聘的是线下小班主讲,本来面试已经走到了最后两轮,谈得都差不多了,公司突然告诉我没有线下主讲老师的编制了,但是双师还在招人,问我愿不愿意转过去。

犹豫了很久,还是去了,据说有机会转在线主讲,薪资待遇比线下主讲还要高很多。但我去了才知道,主讲老师和辅导老师基本是两个职业,作为辅导老师,要接受各种各样规定外的工作安排,算是公司的廉价劳动力了。

我还年轻,也不是不愿意做这些额外的服务工作,开始的一年还做得不错,但第二年就很难。我和负责排课的中层关系一般,其他辅导老师都经常围在她周围奉承,我一般碰到了就礼貌打个招呼,不会特意亲近,结果暑假班刚开始,发现我的课表安排非常不合理。

首先是校区很差,我去的那两个校区都是新开的,没什么人气,而且家长是出了名的难伺候,因为刚开的校区一般都做活动,正价课少,流动性大,家长们问题多、要求多、不满多,我心里也挺害怕。

关键是换校区,上午在A校区先上一节,然后要在一个小时内换到B校区,中午又要回到A校区,也是一个小时,第一次还好,虽然麻烦但来得及,第二次我基本连吃饭的时间都没有,每次都是在便利店排队买点吃的匆匆扒拉两口就进教室了。

这样几次之后,我身体实在受不了,考虑到课前答疑服务并不是硬性要求,我就跟下午课的学生说,课后再来找我,结果就因为这个原因,有两个家长把我投诉了,说是孩子下午上完课还要去赶别的辅导班,别的老师都能课前答疑,就我不行,非常不满。

我也很委屈,但主管说我被投诉的次数已经超过了公司规定,让我上完暑假就走人,没得商量。我后来去找了校长,也不管用,我才看清公司的管理是有很多灰色地带的。

我现在就等赔偿,如果连赔偿都没有,我上法庭也要和他们抗争到底。现在想想,难怪公司只招什么也不懂的应届生,因为我们最好欺负,最好糊弄,最好利用完我们的干劲儿就抛弃不管,这也算我进入社会遭到的第一顿毒打了。

老板连生三个女儿

裁掉了生双胞胎儿子的员工

阳阳

资深 HR 从业 8 年

我刚毕业在深圳工作的时候,当时的老板想要儿子,但是生了三胎都是女儿。后来就有同事生了一对双胞胎男孩儿,老板很生气,说同事把他生儿子的运气抢走了,就把这位同事裁掉了。我当时只是个 HR 专员,觉得老板挺可笑。

做了七八年的 HR,公司想开除员工会找各种各样的理由。我觉得奇葩裁员最根本的原因是老板文化程度太低,不懂法或者觉得我是老板我说了算。

做了 HR 之后,老板曾经要求我开除过孕妇、军嫂等,没有办法拒绝,但是良心上特别过不去。所以每次在“奉旨”进行这种违法开除之前,我都会跟员工讲应该怎么说。

正式约谈的时候,我就会以员工有证据,开除人家需要打官司为由尽量不开除。HR 可以说是“好人”也可以说是“坏人”,希望每一位 HR 都不要做昧良心的事儿。

我现在自己就在起诉我之前的公司,没想到我保护了这么多孕妇的利益,最终自己怀孕的时候没有保护得了自己。2018 年底我怀孕,在一家公司就职,当时那个月 10 号我跟公司说怀孕的事,14 号就被开除了。我们同期两个孕妇,一起被开除的。我还比较幸运后来顺利把孩子生下来了,另外一位孕妇被开除后生气伤心胎停了。

后来我仲裁赢了,但公司一直不服,还在上诉,挺耗时间的,现在在一审。遇到这种现象,肯定要收集证据,然后劳动仲裁维护自己的权益。老板不懂法的话除了起诉也没别的方式了,因为胳膊肘拧不过大腿。

我给孕妇的建议是,把邮箱绑定在自己电脑上,留好邮件证据,如果 HR 等找谈话要留录音,不该干的工作拒绝,身体要紧。如果公司能有协商的余地,就协商离职吧。

-涉嫌歧视女员工-

穿了一次露背装

就因为服装不得体被辞退

王美丽

互联网从业者从业 3 年

我前公司原本在东北主营电话销售业务,属于电视购物范畴。后来尝试转型,一部分人来到深圳试水电商。我当时被招去做前台和人事,也同时兼任了一段时间客服。

被裁之前的那一个月,就因为我平时黑眼圈重,我们财务总监直接当着同事的面,不像是开玩笑的语气吐槽我说,你眼袋怎么这么大,我当时就把这句话记心里了。那时因为下班做直播赚了点钱,没过几天就去把眼袋割了。

割完要有个恢复期,只能带着墨镜上班,在公司同事问我眼睛怎么了,我就说,“谁让你们说我了,就去做了眼袋呀”,财务总监当时就在现场。

过了不久,我在办公室正常办公,当天穿了一条裙子露了腰的部分。他路过看到,就当着同事们的面说我“不得体”,还要求我以后别穿这衣服了。那条裙子我就穿了一次,其他时候都穿职场正式服装。没想到后来辞退我,其中一条重要理由就说我服装不得体。

那一个月,他们经常说我这不对那不好,我就觉得反常了。之前没想着主动辞职,是觉得自己还有机会,想通过好好表现掰回来。

领导找我谈辞退的事的时候,我已经有了心理准备。他们说我工作不上心,但我工作是按时完成的;说我做直播耽误工作,而我当时已经半个月没直播了,而且那是下班休息时间才做;接着说我服装不得体,这辞退的理由实在站不住脚。我是人事,比较懂劳动法,提前打开了录音软件记录,劝退理由不合理,我一步不让,因此拿到了赔偿金。

当时公司电商业务没做起来,他们开始陆陆续续找理由劝退人。在我之前,被劝退的员工都以为是自己工作能力出了问题,没想到有赔偿金这回事,因为我拿到了赔偿金,大家才反应过来这是裁员。后来被裁的同事都来咨询我,他们也都要到了赔偿。

看开一点,被辞肯定是有原因的,但是这个原因不一定就是你不好。

因为太瘦没有合适的工作服

主管让我不要再去上班

苗慧

在线教育公司会议接待员从业 1 年

我第一份工作经历绝对奇葩。当时的工作是接待员,就是会议室里端茶倒水的那种。

工作第三天,主管突然找我谈话,说我和一起去的两个同事拉帮结派,让我专心在工作上。我们刚去两三天关系能有多好啊,而且只是接待员而已,哪有能力鼓动谁拉帮结派呢。

没想到工作到一个月的时候,因为我们要换一批工作服,主管又找我了,说我人太瘦、工作服没有适合我的,叫我不要再去上班了,就是直接辞退我了。

理由很荒谬,但是我当时刚毕业,也不敢问,觉得人家不让干就别干了,就没有深究。

其实让我穿大一码的工作服,或者让我自己把服装改小都是可以的。而且我不觉得,我比别人做得差,如果要说真正的原因,我想可能还是因为我太瘦,只有 38 公斤,个子也不高,难免给人一种未成年的感觉吧。后来,跟我同去的两个同事也是不久就离开了,一个干了三个月,一个干了半年。

我本身就是学幼师专业的,后来就一直在做幼师了。回头想想,我很感谢这个主管的决定,因为这份工作非常简单、枯燥,只能按部就班地工作、下班休息,学习不到任何东西。

同级别女生太多,我被总监降级了

Gloria

前汽车零部件上市公司员工从业 5 年

我们公司“逼人走”的奇葩手段真的太多了,不管是去是留,大家都人心惶惶。

受疫情影响,我们今年 3 月初复工,业务线部分工人先于办公室职员到岗,其中有一位员工因为在更衣室(洗澡间)抽烟,就被开除了。

当时 HR 写了一封中英文邮件在整个亚太进行了通报批评,其实工人室内抽烟在疫情之前不至于被开除,但那个月底,有很多运营的工人都被裁了。国外的部门也有类似的情况,一些被裁员工的亲戚还在 Twitter 上@特朗普,称公司的美国工厂对其姐妹很不负责。

去年 6 月,公司去江苏大学宣讲,讲得学生们热血澎湃,招进来一批管培生,有的推掉了研究院的工作加入公司。但 11 月公司就把这批人裁了近三分之二,到今年年中,几乎所有 2018 年、2019 年的管培生都走光了,这对一家上市公司来说是很不正常的。

同样也是去年,仅针对研发和制造两个部门 20 多名应届,进行无差别裁员,运营部门的应届生暂时没有受影响。奇葩的是,因为当时进来的时候说是轮岗,每个岗位都要待,这对正好在研发、制造岗位的同学来说很不公平。因为一下子裁员太多,公司还被政府约谈了。讽刺的是,这家公司每年还是当地的最佳雇主。

我也是今年被挤走的员工之一。我的直系上司调回美国之后,新总监开始频繁找我谈话,隔了两个月突然把我降级,理由是在我们的组织架构上面,我和另外两个平级的都是女生,女生太多了,需要将我往下调一下,看上去比较平衡。

我被分配到新的岗位之后,他又将我的工作量分给其他的同事去做,试图拆掉我的工作量,事已至此我只能自己提了离职。

剩下的同事日子其实也不好过,其中一位总裁助理工作了好几年,却一直只有外包合同,我一直觉得她是被上级 PUA 了,她同时要做好几个职能,为此公司要她自费去学 PPT、去学做秘书,她还一直被打击说能力不行。

最近,公司需要她把外包合同换成派遣合同,并称不签的话会影响她以后工作的背调,她不敢不签。但是如果签完派遣合同,不仅公司对她的束缚和要求更多了,她前两年的工作经历就不算了,如果被裁,按照N+1 的规则,可能只有 0.5+1 甚至 0.5 都没有,这让她的安全感跌落到谷底。

-选择维权-

维权 20 个月,最终拿回 7 个半月工资

阿成

互联网从业者从业 10 年

我工作 10 年了,唯一一次被奇葩裁员是在 3 年前。当时,我在一家化妆品公司担任在线业务的电商部门负责人。截至离开,我在那家公司一共干了 2 年零 4 个月,合同是两年期,2016 年 10 月到期后老板没有跟我续约,但一直还存在实际的劳动关系。

那时公司需要搬迁到新办公室,时逢年底,老板强行解散了团队,从元旦开始一直以放假的名义让大家休假。放假期间无薪,工资只发到了 2016 年 12 月。

当得知部分同事还在正常上班,但多次询问 HR 只是被告知继续放假时,我意识到老板可能要裁我了。

可气的是公司没有通知要裁员,就一直拖着,问 HR 就说等老板安排。年假结束后,我又等了一段时间,始终没有消息。无奈之下,我去申请了劳动仲裁,但是公司的合同、工作场合和工厂都是独立的主体,发放工资则是通过老板的账户,虽然老板都是同一个人,但整体关系非常混乱,劳动仲裁解决不了。

后来,我试图找老板谈谈,但他失联装作不在,HR 则以在寻找新的办公地作为托辞。2017 年 3 月我找了律师起诉公司,第一次开庭,老板去了,在庭外对我进行人身攻击,庭内编造证据,说我是自离和无故旷工。

维权过程虽说比较顺利,但举证也很麻烦。所幸,以我之前对老板脾气、作风的了解,判断老板可能打算通过故意放假来逼迫我们自离,所以我年前就在收集整理工作资料,年后也正常去公司打卡保留了证据。

整个维权过程持续近 20 个月,直到 2018 年 10 月才拿到 7 个半月工资的赔偿,另外请律师花了 15000 元。

我原本是打算年后离职的,但他以这种故意放假停薪的方式逼迫自离,让我觉得作为一个部门负责人和老员工,没有得到应有的尊重。跟我同期走的其他同事都放弃维权,因为工龄太短,耗时太长,觉得不划算。

公司一边欠薪,一边大规模招人

孔孔

互联网从业者从业 4 年

2019 年 9 月 24 日,我在广州天河入职了一家做短视频线下培训的传媒公司,负责新媒体,主要工作是给甲方代运营双微和课程活动,当时谈的试用期 3 个月、薪资 7K,转正后薪资 8K。

到了 12 月 19 日,离试用期结束还剩 4 天的时候,人事通知说我不符合公司的岗位需求,让我当天离职。我问不符合哪一条要求,他们也说不出具体条款,就是要求我走。

当时 11 月的薪资还没发,合同上写明发薪时间是次月 15 日。人事说,11 月和 12 月的工资会在 1 月发薪日发。

到了 1 月中旬,工资没到账,我发微信问老板,他说公司现在很困难,只能先发 2000 元。2 月又问了一次,给了 1500 元,后面再问就没有回复了。

原先我也理解公司的困难,愿意再等等,没太计较。从那家公司离职后,我一直忙着找工作,没有跟原来的同事联系,近期跟他们联络上,才得知自我之后,公司一共陆续裁了 10 个人左右,有人从 12 月到 2 月工资都没拿到。

一边是我们这些被裁的员工,不仅没有赔偿还被欠薪。另一边,有被裁欠薪的同事回公司看过,发现公司正常营业办公,还在大规模招人。我在前程无忧上看到公司的招聘信息,居然还使用了我在职时拍的照片,用来介绍团队氛围。

前段时间,我联系了 2 个现在还在职的同事,得知他们的工资一直是正常发,否则也不会撑到现在。以上这些,让我判断公司是在恶意欠薪。

如今大半年过去了,公司一共还欠我 8000 元左右。上周,我和几个同事一起去广州劳动纠纷调解中心投诉了,至于结果如何,还需要等待。

所谓“旷工”

都是我代表公司参加活动或团建

星星

互联网从业者工作 3 年

我 2017 年在去哪儿实习并转正,先后在携程、去哪儿工作了两年多。2019 年 11 月,我接到通知被优化了。在这之前的一段时间,我的 leader 离职了,我们组就剩下我和一个负责微博的,后来空降来一个老板。

空降的老板招了一批自己之前的同事,后来就开始裁员,我们部门裁了 3 个,还有一个是哺乳期的老员工。当时 HR 给我的理由是我所做的公众号运营工作要外包出去了。

我们就开始谈赔偿,我要求年终奖也给我,按N+2 赔偿,我工资不高,工作了 2 年一直也没涨工资,只有几千块,但赔偿没有谈拢。他们为了少赔偿 0.5N,在我过生日的前一天(过生日当天是入职时间),单方面跟我解除协议,此时还有好几天的年假没有休。HR 让保安给我收拾东西,他们单方面跟我解除协议,在我生日的前一天,把我的四五箱东西直接扔在公司门口,把我轰出来了。

去年 11 月的工资,到现在还欠了我两三千。之后我给 CEO 发了一封邮件,讲述我两年工作的成绩以及我那天面临的事情。CEO 回复说去哪儿的 HR 团队非常专业,他尊重各方的正确决策。看完 CEO 的回复,我彻底寒心了。

后来我就走劳动仲裁,找了一个律师,但律师一直劝我和解。仲裁员一直跟我说,以前这个公司的很多案例也都是他处理的,不知道想暗示什么。他们劝我不要上诉了,不然以后找工作也会受影响。

上法庭的时候,公司拿出了工作时间的证明,里面显示我有 3 天的旷工记录,20 天的迟到早退,指出我这个时段工作时间不足 9 小时,不符合公司的标准,最后我败诉了。

但其实所谓的旷工都是我代表公司去参加活动或者部门团建,都有公司内部软件和微信工作群的聊天证明,而工作时间就更离谱了,我们公司的员工手册上写的是我们可以在早上 9 点到 10 点之间到公司,下午 6 点到 7 点之间离开,除去中午休息一个小时,工作时间要满 8 小时。

事实上我们的日常工作中,不要求严格的上下班打卡时间,有的人可能 11 点才到公司,晚上会加班,一个考勤周期内累计工作时间平均每天满 9 小时就行。一般我们如果迟到早退或旷工会收到公司的邮件提醒,也会扣工资。我和大多数人一样,总体工作时间满 9 小时,也没收到邮件提醒迟到早退或被扣过工资。

但公司就钻了这个空子,因为劳动合同上写着依照员工手册的标准执行,他们就统计了我迟到早退的 20 天,以此为由开除我并不赔付补偿金。我现在提起上诉了,找了以前的一些同事帮我证明工作时长的问题。

经历了这一场,一开始我觉得我做得很正义,但现在有时候觉得自己还是比较傻,他们把我轰出公司的时候,我还觉得这是我的第一份工作,对这个公司付出很多,即使已经崩溃了也还是要理智处理。

走法律程序成本太大了,从去年的 12 月中旬开始仲裁到现在,这件事给我造成了很大的心理压力,几乎每天都在想该怎么做,经常失眠。在寻求个人维权的各种方式中,我一直相信法律的正义,但最终结果还要等后续法庭判决。

文中阿成、王芳芳、王美丽、柳鹏、星星、阳阳、苗慧、景礼、Gloria、杨昕、周子涛为化名。

以上都是源于生活的真实事件,希望能为大家提供一些借鉴。

联系我们