关于焦虑一

“我越来越觉得你想要做成什么事情,或者想要得到什么东西,你就按部就班,按自己该做的,安静点也用点心,渴求别那么强烈,慢慢的一段时间后,水到渠成是件非常自然的事情。

但你要是特别心急特别用力手忙脚乱,最后往往什么都得不到,还搞得一团糟,真的,生活就是这样,特别用力就特别容易疲惫,当你所有执念的东西发自内心不在意时,好像一切都会如约而至,当你真放下之后,会发现一切都在朝你期待的方向发展。所以慢慢来吧,一切都会变好的。

无论你活成什么样子,都有人说三道四,这个世界我们都只来一次,吃想吃的饭,见想见的人,看喜欢的风景,做喜欢的事。少研究别人,多提升自己。

大器晚成也好,永远到不了山顶也罢,但一定要快乐和真诚,没有什么大不了,这个世界上总要允许普通人的存在。”

上面是我一直存在备忘录里的一段话,用来警醒自己生活有时候不要“太用力”,也希望能对你有帮助。

查看更多

数据源配置

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
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="${dataSource.driver}"/>
<property name="url" value="${dataSource.url}"/>
<property name="username" value="${dataSource.username}"/>
<property name="password" value="${dataSource.password}"/>
<property name="filters" value="stat"/>
<property name="maxActive" value="${dataSource.maxActive}"/>
<property name="initialSize" value="${dataSource.initialSize}"/>
<property name="maxWait" value="60000"/>
<property name="minIdle" value="3"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x'"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
</bean>

<!--SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" name="sqlSessionFactory">
<property name="dataSource" ref="druidDataSource"/>
<property name="typeAliasesPackage"
value="com.weimob.saas.mall.user.center.web.dao.model"/>
<property name="mapperLocations" value="classpath:/mappers/*.xml" />
<property name="plugins">
<list>
<!--rowBoundsWithCount=true 会导致某些情况下出现严重的性能问题,因为计算了count-->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
PageHelper=mysql
offsetAsPageNum=true
rowBoundsWithCount=false
pageSizeZero=true
reasonable=false
supportMethodsArguments=false
returnPageInfo=none
</value>
</property>
</bean>
</list>
</property>
</bean>

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

<!-- 配置通用Mapper -->
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.weimob.saas.mall.user.center.mapper"/>
<property name="properties">
<value>
mappers=com.weimob.saas.mall.user.center.mapper.CustomMapper
</value>
</property>
</bean>

<!--配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druidDataSource"/>
</bean>

<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" order="0"/>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="druidDataSource"/>
</bean>
</beans>

CompletableFuture

CompletableFuture

可以看到,thenAccept和thenRun都是无返回值的。如果说thenApply是不停的输入输出的进行生产,那么thenAccept和thenRun就是在进行消耗。它们是整个计算的最后两个阶段。
同样是执行指定的动作,同样是消耗,二者也有区别:

thenAccept接收上一阶段的输出作为本阶段的输入

thenRun根本不关心前一阶段的输出,根本不不关心前一阶段的计算结果,因为它不需要输入参数

心理学概要

心理学:漫长的过去,短暂的发展

心理学创建

1879年,德国心理学家、实验心理学创始人威廉·冯特,在德国莱比锡大学创立了世界上第一个专门研究心理学的实验室,这一年被公认为心理学诞生之年,而将心理学作为一门独立的科学研究的冯特被公认为“心理学之父”。

19世纪末到20世纪50年代,西方心理学派林立

  • 冯特和他的学生爱德华·铁钦纳所创立的构造主义,
查看更多

知识清单,从开发到架构师!

常见模式与框架

设计模式
开发框架:比如 Spring, SpringMVC, Mybatis

工程化与工具

软件开发流程&规范
Git
敏捷开发
Docker

分布式架构

分布式架构设计原则
负载均衡,高可用
RPC,消息队列
分布式存储
高性能NIO框架
分布式缓存
分布式消息中间件

微服务架构

Spring Cloud
Spring Boot
Dubbo
Service Mesh

数据库分库分表

MySQL
MyCat
Sharding-JDBC

查看更多

docker问题日志

docker WARNING: IPv4 forwarding is disabled. 解决方法

1
2
3
4
5
6
#般情况下,我们的linux机器的ip forwarding选项都是关闭的。 但是如果我们的机器需要做网关,或路由器。那么这个就要打开了
echo net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf
systemctl restart network && systemctl restart docker

#查看是否修改成功
sysctl net.ipv4.ip_forward

docker构建脚本报: Syntax error : end of file unexpected (expecting “then”)

用vim 操作 startup.sh :set fileformat=unix修改ubuntu 和linux服务器、 dos等非图形界面冲突
:wq保存

查看更多

MapStruct

MapStruct 一个 Java 实体映射工具

一个成熟的工程中,尤其是现在的分布式系统中,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具

maven 依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.3.Final</version>
</dependency>

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.3.Final</version>
</dependency>

查看更多

hexo个人博客搭建

优化

开启本地搜索

1
npm install hexo-generator-searchdb --save

添加点击爱心效果

1、创建js文件
/themes/next/source/js/src下新建文件 clicklove.js ,接着把该链接下的代码拷贝粘贴到 clicklove.js 文件中

1
!function(e,t,a){function n(){c(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: fixed;}.heart:after{top: -5px;}.heart:before{left: -5px;}"),o(),r()}function r(){for(var e=0;e<d.length;e++)d[e].alpha<=0?(t.body.removeChild(d[e].el),d.splice(e,1)):(d[e].y--,d[e].scale+=.004,d[e].alpha-=.013,d[e].el.style.cssText="left:"+d[e].x+"px;top:"+d[e].y+"px;opacity:"+d[e].alpha+";transform:scale("+d[e].scale+","+d[e].scale+") rotate(45deg);background:"+d[e].color+";z-index:99999");requestAnimationFrame(r)}function o(){var t="function"==typeof e.onclick&&e.onclick;e.onclick=function(e){t&&t(),i(e)}}function i(e){var a=t.createElement("div");a.className="heart",d.push({el:a,x:e.clientX-5,y:e.clientY-5,scale:1,alpha:1,color:s()}),t.body.appendChild(a)}function c(e){var a=t.createElement("style");a.type="text/css";try{a.appendChild(t.createTextNode(e))}catch(t){a.styleSheet.cssText=e}t.getElementsByTagName("head")[0].appendChild(a)}function s(){return"rgb("+~~(255*Math.random())+","+~~(255*Math.random())+","+~~(255*Math.random())+")"}var d=[];e.requestAnimationFrame=function(){return e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)}}(),n()}(window,document);

查看更多