Fork me on GitHub

享乐适应症

今天在朋友圈看到这样一张照片,讲到了”享乐适应症”,感觉很有意思,我也经历过。

有时候我碰到想买的东西也会有种 “我要是得到了什么东西我就会幸福” 的心理,但真正得到之后愉悦感又很快平淡下来。

img

1. 什么是享乐适应

享乐适应是指当环境的改变给人带来快乐时,人们通常会很快习惯环境的改变,恢复到平常的快乐程度。

每个人内心都有一个感观温度计,我们还有一个“快乐温度计”,记录着我们的情绪变化,从不快乐到平和,再到快乐。当我们经历开心的事情时,快乐“温度”就会升高,反之则会降低。但是这个过程我们也会逐渐适应。

这种“享乐适应”的最经典例子,来自1970年代对乐透中奖人的研究,他们在赢得奖金的一年后,并没有比未中奖的人快乐。 “享乐适应”能够解释为什么重大生活转变(像是薪资所得,婚姻,健康状况和居住地点),对我们整体幸福感提升有限。不仅如此,从针对双胞胎和领养孩童的研究看出,每个人的快乐程度有50%是在出生时就已决定了,这“遗传参数”让我们装着快乐的玻璃瓶呈半满状态,任何高涨看来最终还是会落回原本的基线。 我们消费的类型,数额,频率,甚至时机,都对我们的长期快乐指数有所影响。一个最主要的发现:如果您在体验上花钱──购买演唱会门票,法语课程,学做寿司,摩纳哥度假酒店房间──您会比购买那些老一套的身外之得到的满意度更为长久。“简单地说:去度假比买一套新沙发要值得。”Dunn教授在总结两位心理学家同行Leaf Van Boven和Thomas Gilovich的研究成果时说。

2. 我的看法

我不太认同“去度假比买一套新沙发要值得” 这句话,我觉得好的产品也是一种体验,购买自己价格承受范围内最贵的产品最好,过度肯定不对。

遇到自己想要的东西,有财力的情况下该买还是要买

得到自己想要的东西后也要构建良好的使用体验,比如买台相机,高兴了一阵心情平淡了,放一边吃灰肯定提高不了多少幸福感,要让其融入生活,多拍照记录和分享生活,才算是物尽其用。

享乐有适应症,其实痛苦也有适应症,我们也会系统性地高估负面情绪的持续时间和强度,人的适应能力其实挺强的。

3. 参考文章

享乐适应

享乐适应:为什么你很难一直快乐

享乐适应:怎样才能让我们持久地幸福?

java单例模式从入门到坟(全解析)

[TOC]

代码地址:https://github.com/gaohanghang/leetcode

一,什么是单例模式

二,介绍

这两个可以先不看,都是概念性的东西,直接看后面的就行,当然看了也可以 🐶

单例模式为什么那么常问?

是因为这个题目可以问到很多知识点。比如线程安全、类加载机制、synchronized 的原理、volatile 的原理、指令重排与内存屏障、枚举的实现、反射与单例模式、序列化如何破坏单例、CAS、CAS 的 ABA 问题、Threadlocal 等知识。一般情况下,只需要从单例开始问起,大概就可以完成一场面试的整个流程,把想问的东西都问完,可以比较全面的了解一个面试者的水平。——

Java架构师联盟

image.png

一,什么是单例模式

单例模式即一个 JVM 内存中只存在一个类的对象实例。

image

https://refactoringguru.cn/design-patterns/singleton

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

二,介绍

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

关键代码:构造函数是私有的。

应用实例:

  • 1、一个班级只有一个班主任。
  • 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
  • 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。

优点:

  • 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。
  • 2、避免对资源的多重占用(比如写文件操作)。

缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

使用场景:

  • 1、要求生产唯一序列号。
  • 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
  • 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

注意事项:getInstance() 方法中需要使用同步锁 synchronized (Singleton.class) 防止多线程同时进入造成 instance 被多次实例化。

三,实现

img

3.1 懒汉式,线程不安全(不推荐使用)

单例模式.002.jpeg

这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。

3.1.1 视频讲解

https://www.bilibili.com/video/BV1ff4y1X7v7

3.1.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* @Description 懒汉式 , 线程不安全
* @Author Gao Hang Hang
* @Date 2019-09-10 21:07
**/
public class Singleton {

private static Singleton instance;

// 构造器私有,其他类就无法通过new Singleton() 来创建对象实例了
private Singleton() {
}

// 获取实例的方法
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}

}

3.2 懒汉式,线程安全(不推荐使用)

单例模式.003.jpeg

这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。优点:第一次调用才初始化,避免内存浪费。缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。getInstance() 的性能对应用程序不是很关键(该方法使用不太频繁)。

3.2.1 视频讲解

https://www.bilibili.com/video/BV17K4y1v7md

3.2.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @Description 懒汉式 , 线程安全
* @Author Gao Hang Hang
* @Date 2019-09-10 21:10
**/
public class Singleton {

private static Singleton instance;

private Singleton() {
}

public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}

}

3.3 饿汉式(推荐使用)

单例模式.003.jpeg

这种方式比较常用,但容易产生垃圾对象。优点:没有加锁,执行效率会提高。缺点:类加载时就初始化,浪费内存。它基于 classloader 机制避免了多线程的同步问题,不过,instance 在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用 getInstance 方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化 instance 显然没有达到 lazy loading 的效果。

3.3.1 视频讲解

https://www.bilibili.com/video/BV1XD4y1m72M/

3.3.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @Description 饿汉式
* @Author Gao Hang Hang
* @Date 2019-09-10 21:12
**/
public class Singleton {

private static Singleton instance = new Singleton();

private Singleton() {}

public static Singleton getInstance() {
return instance;
}

}

3.4 饿汉 变种

单例模式.005.jpeg

表面上看起来差别挺大,其实更第三种方式差不多,都是在类初始化即实例化instance。

3.4.1 视频讲解

https://www.bilibili.com/video/BV1yi4y137vP/

阅读更多...

科技与人文

我们很容易重视科技而轻视人文

技术满足需求,人文构造体验(体验达成品牌)。

— 张小龙

Technology可以使人的生活更加的便捷、有效率,但是始终是枯燥的,有点常人无法接触到的,人文(Liberal Arts)是美的诠释,Technology+Liberal Arts教会了人们如何生活的更加有品质,更加有色彩

杨柳

参考

如何理解乔布斯说的苹果是技术(Technology)和人文(Liberal Arts)的结合?

张小龙的知乎号

IntelliJ IDEA 的代码搁置功能

image.png

当遇到需要临时修改的 bug,当前正在开发的内容总不能删掉吧,这个时候就需要把当前已经开发的代码另外保存下来(即保存现场),当把 bug 改完后再恢复,来回归之前的开发工作,IntelliJ IDEA的搁置功能就能帮助我们解决这个问题

IDEA 提供了 shelve 的功能,shelve 的意思是“将…搁在一边”,即把还没写完的代码先搁在一边。我开发都是使用 jetbrains 公司的 IDEA 和 PhpStorm,它们就提供了 shelve 的功能,方法:

首先在 IDE 的底部找到“Git”,点开会有 Local Changes 的选项卡,选中你要搁置的代码,点击右键,选择“Shelve Changes”,在提交的输入框中输入你的注释,以便回来的时候识别你需要的版本,点击“Shelve Changes”键即可。这时选项卡上会多一个“Shelf”的选项卡,里面就有你搁置的代码。

img

img

img

阅读更多...

从《上瘾》到 《不被干扰》

忘了在哪里看到的说《上瘾》的作者出了本新书教人如何保持注意力,感觉很有意思,亚马逊看了下是2019年出的新书,好像还没中文版

作者一本书教如何让别人上瘾,一本书教人如何摆脱上瘾。左右互搏,哈哈

image.png

image.png

让别人上瘾,而让自己保持注意力的这一行为,让我想到张一鸣和他的字节跳动,推荐看下这篇文章 抖音设局:张一鸣的“延迟满足”和大众的及时行乐

高智商、高自律的人做普罗大众的生意,是一件可怕的事。张一鸣身上有“机器人”般的理性和克制,信奉“延迟满足感”,在很多即刻享乐的关头,会选择克制,但他也明白,这种克制不是所有人都能做到的,或者说,一般人很少能做到。

深谙人性弱点的精英,在“延迟满足感”中飞速进化,却在做着没有延迟满足感、常常围绕一个东西转的大多数人的生意,比如,今日头条和抖音。这些精英在千变万化的世界中抓住了一些不变的规律,他们选择做归属于自己的人,受苦受难,追求真实的幸福和自由的快乐,却希望其他人都是“快乐狗”和“寻求刺激的小鼠”。

张一鸣把人划分为两类:

活在现实中的少数精英和围绕着一个东西转的大部分人。

他表示,“少数精英追求效率,实现自我认知,他们活在现实中。但大部分人是需要围绕一个东西转的,不管这些东西是宗教、小说、爱情还是今日头条。用户是需要一些沉迷的,我不认为打德州、喝红酒和看八卦、视频有多大区别。”

有人选择成为巴甫洛夫的快乐狗,有人选择成为斯金纳寻求刺激的小鼠,有人选择做归属于自己的人,受苦受难,要真实的幸福,求自由的快乐。

有的人,选择做第三种人,又希望其他人都是前两类。

可以预见的是,在未来,技术对人的控制,将会越来越频繁,也越来越不易察觉。

这些势不可挡的巨大力量,可能会为我们创造更多的资源,但我们仍应该当心,认识自己,看清它们,使用它们,避免被捕捉,乃至被控制。

而对于这些力量的拥有者,警惕永远不能少。

大多数人在享受片刻的欢愉,少数人在追求延迟满足感,要去成为那少数部分人(我承认我到现在还是喜欢刷手机😂,这点要改正🤣)

配置 Swagger 带 token 访问的两种方式

推荐使用全局的方式

1. 每个接口单独传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

/**
* @Description: swagger配置类
* @author: Gao Hang Hang
* @date 2019/01/14 18:42
*/
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {

public static final String AUTHORIZATION_HEADER = "Access-Token";
public static final String DEFAULT_INCLUDE_PATTERN = "/api/.*";


/**
* TODO
* 可以根据配置读取是否开启swagger文档,针对测试与生产环境采用不同的配置
*/
private boolean isSwaggerEnable = true;

//是否开启swagger,正式环境一般是需要关闭的,可根据springboot的多环境配置进行设置
@Value(value = "${swagger.enabled}")
Boolean swaggerEnabled;

@Bean
public Docket createRestApi() {
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
ticketPar.name(AUTHORIZATION_HEADER).description("user ticket")//Token 以及Authorization 为自定义的参数,session保存的名字是哪个就可以写成那个
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build(); //header中的ticket参数非必填,传空也可以
pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数

return new Docket(DocumentationType.SWAGGER_2)
//.groupName("group")
.enable(swaggerEnabled)
.apiInfo(apiInfo()).select()
// 对所有该包下的Api进行监控,如果想要监控所有的话可以改成any()
//.apis(RequestHandlerSelectors.basePackage("com.iscas"))
.apis(RequestHandlerSelectors.any())
// 对所有路径进行扫描
.paths(PathSelectors.any())
.build()
.globalOperationParameters(pars);
}

/**
* @return 生成文档说明信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("XXXX系统")
.description("描述")
//.termsOfServiceUrl("http://gaohanghang.github.io")
.license("Apache 2.0")
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
.version("2.0.0").build();
}

}

效果:

image.png

阅读更多...

git如何忽略已经提交的文件 (.gitignore文件无效)

使用 idea 提交代码的时候可能会遇到想要忽略的文件夹出现在提交列表中的情况。

以 .idea 目录举例。假如之前没将 .idea 目录添加到 .gitignore 文件中,提交代码的时候又把 .idea 目录提交上去了,那后面再在 .gitignore 文件中添加 .idea 目录是不会让提交列表中的 .idea 目录消失的,这个时候我们就需要使用命令删除暂存区中的 .idea 目录。

image.png

git rm --cached <file>。这个命令会直接从暂存区删除文件,工作区则不做出改变。”git rm –cached “命令比”git reset head”更好,前者是删除掉,后者是替换掉。

git rm -r --cached <file> 可以删除文件和文件夹

1
git rm -r --cached 文件或文件夹路径

例如

1
git rm -r --cached .idea/

参考文章

intellij 创建一个文件自动就add到git了,这个怎么取消

.gitignore配置规则 及其 git rm -r –cached 去掉已经托管在git上的文件

高考十大热搜专业 ,计算机相关的占了8个

近日(2020-7-5),央视发布了高考志愿十大热搜专业,其中,前五名分别是人工智能、机器人工程、电子商务、物联网工程、大数据技术。

可见这些高中生都不傻,都知道计算机时代是未来,但如此多的人过度关注计算机专业是否是种正常的现象呢。未来的计算机相关岗位的竞争势必会非常激烈。

参考

https://m.weibo.cn/detail/4523401052732810

2020十大热搜专业出炉,这个专业今年最受高考考生关注!

《软件随想录》卷2 读书笔记

软件随想录

第一部分 人员管理

寻找优秀的程序员之实战指南

我能够认同公司吗

大多数程序员工作不是为了谋生,他们要的不是一份“朝九晚五”的工作,他们要的是工作所能带给他们的意义。他们想要认同他们的公司。

程序员不在乎的一件事

他们实际上不在乎钱,除非你在其他事情上搞砸。

我们说程序员不在乎钱,并不意味着你可以向他们支付低工资。因为程序员对公正公平是在乎的。

第二部分 写给未来程序员的建议

给计算机系学生的建议

别担心所有工作都被印度人抢走

真正优秀的程序员根本不会失业

在耶鲁大学的演讲

为什么做一个内部程序员糟透了?

  1. 你永远无法用正确的方法做事。你总是被迫用最保险的方法做事。
  2. 一但你的程序可以用了,你就不得不停止开发。
  3. 如果你在专业的软件公司中编程,你的工作与公司的主营业务直接相关,是能够为公司直接带来收入的。

第三部分 设计的作用

寸土必争

商业软件,那种你卖给别人的软件,就是一种寸土必争的游戏。

别给用户太多选择

第四部分 管理大型项目

火星人的耳机

对于己方的行为要保守,对于他方行为要宽容。

要挣钱,就别怕脏

解决轻而易举的事情时拿不到钱的

第七部分 经营软件公司

仿生学办公室

良好的办公空间-尤其是单独的办公室–能够提高程序员的生产率(这点在国内不太现实,而且我觉得扁平化会更好些)

你的公司的成功依赖于程序员真正以公司为家的程度。

他山之石,不可攻玉

对你重要、最关键得部分,你一定要使用原始工具。

  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信