自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一盏洗魂水,一杯优乐美

从程序猿走向工程狮

  • 博客(45)
  • 收藏
  • 关注

原创 【读书笔记】金字塔原理-目录

欢迎来到学习《金字塔原理》的旅程。我在阅读这本书的过程中,阅读的越深入,越觉得这套理论的精妙:简入简出,没有阅读门槛,却效果明显,能直接改变一个人的工作习惯。在学习的过程中,我觉得如果有人能设计一门课程来传授这个理论就太好了,可惜我个人的能力有限,时间也有限,无法由我自己来设计一套完备的课程。于是我选择了写下这个系列的文章,既是读书笔记,供我自己拾遗;也是一份分享资料,供小伙伴相互学习进步。 这个系列的文章的目录如下,正文的部分:【读书笔记】金字塔原理-概览【读书...

2022-05-30 17:21:09 766

原创 【读书笔记】金字塔原理-学习总结

至此,我们已经学习了了构建金字塔的基本原理,也学习了金字塔呈现的原则,应该已经可以尝试搭建属于我们自己的金字塔了。本篇我们再提供一些小贴士,希望能使你浇筑的金字塔更为坚固,并在本篇的最后,做整个系列的学习总结。Tip1:上下文之间要有过渡在较长的文章里,应该在每一组主要思想观点开始或结束的时候稍作铺垫,让读者知道已经论述的和下一步计划论述的内容。保证论点与论点之间的连接顺畅,不生硬。相信你已经注意到了,我在编写这个系列的文章的时候,会特意在文章的开...

2022-05-30 16:55:41 461

原创 【读书笔记】金字塔原理-呈现金字塔

当我们找到金字塔结构中的逻辑关系,准备和其他人交流时,需要组织好呈现的方式,以便受众能对构成金字塔不同层级的思想一目了然。在纸面上或屏幕上展示我们的思想时,无论采取何种形式,在视觉上都要确保能加强组成金字塔的思想之间的逻辑性和关联性。因此:用读者的眼睛看到的来强化他们头脑接受到的金字塔结构。写文章时,呈现金字塔层级,突出显示文章的结构的方法有以下几种:多级标题法 下划线法 数字编号法 首行缩进法 项目符号法多级标题法(重...

2022-05-30 16:08:54 392

原创 【读书笔记】金字塔原理-构建金字塔的逻辑顺序

至此,我们已经学会了如何搭建文章的总体架构。我们可以较快的确定文章的主题和读者可能提出的疑问,编辑好序言(开场白)中的“背景”和“冲突”,提出问的中心思想和关键句要点。之后就可以使用疑问——回答式的对话方式,在每一个关键句要点之下展开论述或说明。补充一个关于中心思想的Tip:在金字塔顶端,表达中心思想的句子不得“缺乏思想性”(如:“我部门存在的5个问题”),而应该使用富有启发性的观点(如:“我部门去年用户满意度同比下降5%,有以下5个原因”)。...

2022-05-27 17:50:24 785

原创 【读书笔记】金字塔原理-演绎推理和归纳推理

上篇我们介绍完了序言的写法,那么接下来就是写正文了。前文我们曾经提到:条理清晰的文章必须能够准确、清晰地表现主题思想下的各思想组的逻辑关系。以正确的方式组织起来的思想会形成金字塔结构,这些思想分别位于不同的抽象层次上,但又相互关联,并且由一个主题思想统领。...

2022-05-26 17:47:22 1210

原创 【读书笔记】金字塔原理-构建金字塔的序言

文章的序言: 文章的序言概括了读者已知的信息,并将这些信息与文章将要回答的疑问联系起来,然后作者就可以将全部精力放在回答这个疑问上。文章的序言通常采用讲故事的形式,即序言应当先介绍读者熟悉的某些“背景”,说明发生的“冲突”,并由此应发读者的“疑问”,然后针对该“疑问”给出“答案”。这种方法可以协助构思出文章的整体架构。序言的四大要素:1、介绍背景2、指出冲突3、引发疑问4、给出答案序言的结构: 序言宜采用“背景—...

2022-05-09 20:21:58 452

原创 【读书笔记】金字塔原理-构建金字塔的层级关系

前文提到:条理清晰的文章所表达的思想之间具有明确的逻辑关系,从金字塔的顶端开始,自上而下地沿着各个分支将文章的思想 一层一层的呈现给读者。如果在写作之前,我们已经清楚自己要表达的思想,那么就可以很容易的将它们组织成规范的金字塔结构。但大多数时候,我们在下笔时只有模糊的想法,或者相对零散的思路,无法准确的把握住自己的思想。那么我们必须理清楚想要表达的思路,理清思路的过程中,书中提供的加速梳理过程的方法是:1、主题与子主题之间的纵向关系。2、...

2022-05-01 15:57:00 1401

原创 【读书笔记】金字塔原理-构建金字塔的思维方式

在介绍如何构建金字塔之前,我们先尝试回答一个问题,为什么我们要构建金字塔?金字塔能帮助读者尽快的理解我们想表达的思路。归类分组,构建金字塔式的思维结构人类大脑会不自觉的将事物按照某种秩序组织起来。如果我们表达的内容本身就具备了这种逻辑结构,将会减少读者重新组织信息的成本。一个书中的例子,妻子要求丈夫出门采购,其提供的采购清单:葡萄 鸡蛋 咸鸭蛋牛奶 胡萝卜 ...

2022-04-29 17:42:59 592

原创 【读书笔记】金字塔原理-概览

用金字塔原理来介绍《金字塔原理》。金字塔原理是什么?金字塔原理是一种重点突出、逻辑清晰、主次分明的逻辑思路、表达方式和规范动作。金字塔的基本结构是:中心思想明确,结论先行,以上统下,归类分组,逻辑递进。先重要后次要,先全局后细节,先结论后原因,先结果后过程。 金字塔训练表达者:关注、挖掘受众的意图、需求、利益点、关注点、兴趣点和兴奋点,想清内容说什么、怎么说,掌握表达和标准结构、规范动作。 金字塔帮助达到沟通效果:重点突出,思路清晰,主次分明,让受众有兴趣、能理解、记得住。 搭建金字塔的

2022-04-27 17:40:49 279

原创 【读书笔记】金字塔原理(反面教材)

今日分享书名:金字塔原理章节:第五章 演绎推理与归纳推理金字塔的构成有三种逻辑关系:向上、向下和横向。上一层思想是对下一层思想的总结和概况,也就是结论先行,以上统下;下一层思想是对上一层思想的解释和支持,也就是逻辑递进,抽丝剥茧;本章介绍的演绎推理和归纳推理,则是同一层思想之间的组织逻辑。书中介绍的两种方式十分有趣,特此记录,以供拾遗。有趣但不适合商业行文的方式:演绎推理,指的是人们以一定的反映客观规律的理论认识为依据,重复从已知部分推向未知部分的思维方式。其思维方式有一个明显的特征,推理

2021-12-31 11:12:32 355

原创 Tomcat8.5.43源码分析-(5)Tomcat进行Web请求处理 第一部分

Tomcat作为Servlet容器,其最重要的应用仍然是处理web请求。这里就沿着Web请求处理这条线,继续探究Tomcat。当Connector接收到请求后,会调用CoyoteAdapter.service(),这里选取重要的部分:@Override public void service(org.apache.coyote.Request req, org.apache....

2021-12-31 11:10:58 318

原创 【学习笔记】Java内置的关键字jstack/jmap/jstat分析运行服务的内存使用情况

用top来查看机器里cpu使用率最高进程的识别号pid方法,这个我们都会,那么怎么进一步分析呢?jstat:jstat-gcuitl -h10 <pid> 1000 1000查看指定进程的内存使用情况,用于评价当前进程是否有内存无法释放问题,包括(会有缩写)如下:S0C:第一个幸存区的大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 OC:老年代大小 OU:老年代使用.

2021-01-12 10:41:04 233

原创 【学习笔记】数据库连接池学习

1、由于程序创建和数据库的连接需要开销(JDBC的创建一个Connection),数据库连接池用于存放这些连接,以供应用程序使用。使用完毕之后,重新把连接放进连接池。2、常见的数据库连接池竞品有阿里的Druid和Hibernate、Spring使用的c3p0。3、数据库连接池在整个调用链路中耗时不大,性能关键有两点:LRU缓存算法:LRU是Least Recently Used算法。存在一个有限长的链表,新加入的元素放置于表头,命中缓存的元素会移动到表头。表尾移出的元素被废弃。 PSCache

2020-12-28 11:14:48 133

原创 【学习笔记】单例模式

饿汉模式,即认为单例对象在单例所在的类初始化时即实例化了。因此无论该单例对象是否真正的被调用,都会进行实例化。实例化的操作放在静态变量或者静态代码块中。public class HungrySingleton { private HungrySingleton(){}; private final static HungrySingleton hungrySingleton = new HungrySingleton(); public static HungrySin

2020-10-16 14:55:47 72

原创 【学习笔记】多线程学习笔记

1、线程开启后并不会立即执行,由CPU来分配。2、并行不一定比串行更快,要注意上下文切换和锁的开销。3、Callable可以定义返回值,可以抛出异常。4、Runnable接口使用静态代理。Thread类本身就实现了Runnable接口。将实现了Runnable接口的线程类的实例作为参数传入Thread的构造方法中,将成为一个代理对象target并由Thread类实例代理。执行Thread实例的start方法,实际执行的就是线程类的run方法。5、扩展,创建线程时,使用Lamda表达式来替代匿名内

2020-10-16 14:03:55 137 1

原创 【学习笔记】使用idea对服务器上的微服务进行远程Debug

由于办公机器上本地启动的微服务有可能无法完全和服务器环境一致,故有时需要直接对服务器上的服务直接远程Debug,记录一下以供拾遗。前提:确定办公机器访问服务器的防火墙权限无问题(本例使用9999端口作为远程连接端口)1、点击'+'号,创建一个Remote启动项;2、指定需要远程连接的服务器,端口;3、复制JVM启动参数。4、在服务器上,使用此处复制的JVM启动参数启动服务;5、在idea中启动remote debug。提示:Connected to the target

2020-09-01 14:40:41 1166

原创 【学习笔记】Logback及Appender相关生命周期

在做项目时,发现自定义的logback的Appender的start方法执行的时机非常的靠前,在Spring框架注入bean之前就完成了。问了一下公司的架构师,start方法的执行时机有两类情况,第一种是服务启动的时候,也就是刚刚提到的时机。第二种是服务触发了logback的刷新机制,找到了spring-cloud-commons项目下的源码,如下:private void reinitializeLoggingSystem(ConfigurableEnvironment environmen

2020-08-05 14:44:16 431

原创 Mybatis缓存学习笔记

基于针对Mybatis缓存的学习笔记,以供拾遗。Mybatis的缓存分为一级缓存和二级缓存。一级缓存基于SqlSession实现,默认开启且不能关闭,只能调整级别。二级缓存基于Mapper实现,本次学习主要关注二级缓存。Mybatis的缓存基于JVM堆内存实现,所有的缓存数据存放于Java对象中。开启Mybatis缓存的步骤:1) Mybatis主配置文件指定cacheEnabled属性为true<settings> <setting name="cach

2020-08-05 10:11:52 132

原创 替换spring-boot-starter-web中的tomcat版本号方法

网上查到的替换的方法有三种:1、更改spring-boot-dependencies中特定spring版本下的<tomcat.version>标签中的版本号。 我使用的就是此方法,但此方法会破坏原生spring的完整性,使得项目移植性差,要特别注意。2、在项目中手动配置<tomcat.version>。 实测此方法无效,实验是pom文件只能获取其父pom中的property配置,父类的父类就无法获取了。3、除外原生的tomcat配置,重新配置。 此方法肯...

2020-07-06 14:54:53 4102

原创 网站https访问获取安全标志方案-ssl证书的申请、购买与配置

公司需要构建一个https访问的公网域名,记录申请过程以供拾遗。首先选择一家SSL证书托管网站,我司使用的是godaddy,使用过程中发现godaddy的网站并不友好,但客服相对专业,且具备中文客服,这里不做推荐,自主购买。1、购买域名。我们也一并在godaddy上购买了;2、购买SSL证书服务,我司购买的是标准版的SSL证书;3、在服务器上创建证书申请文件csr和申请私钥key。csr用于申请证书,key用于放置于nginx的私钥区域。openssl req -new -newk

2020-07-02 10:10:33 770

原创 阿里云云企业网(CEN)构建实例

公司的跨国业务尝试使用了AlibabaCloud的云企业网(后简写为CEN)加速,记录一下搭建实例的整个过程,以供拾遗。构建CEN加速前,已存在私有云暴露的https互联网访问入口,也就是需要进行跨国访问加速的IP,记为:p_cloud_IP。当前存在英国用户通过互联网直连搭建在武汉的私有云的链路,示意图如下:在AlibabaCloud官网上,首先创建两个VPC实例,一个在上海(阿...

2020-04-28 09:26:20 3239

原创 Linux通过ssh进行scp远程传输的记录

记录一下碰到的坑,虽然主要的问题是jenkins存在缓存,不重启的话不会读到服务器的配置。1.在client服务器上ssh-keygen 生成了证书,秘钥在/home/appuser/.ssh/文件夹下。产生了四个文件:authorized_keys 授权秘钥,在server服务器上会看到,后面会提到id_rsaid_rsa.pub 私钥known_hosts2. 把id_rsa.p...

2020-03-26 14:16:52 550

原创 Spring 5.2.1源码导入eclipse时缺失CoroutinesUtils错误的解决方案

Spring源码版本:5.2.1源码导入后报错:CoroutinesUtils cannot be resolved由于查了很多资料都没有解决此问题(包括要导入spring-core-coroutines 下的jar包的解决方案,然而我根本就没下到这个工程,github上的其他版本也没有此工程,此解决方案纯属误导),最终自己摸索出了解决方案,记录一下。我导入源码后,多个包(例如spri...

2019-10-17 16:29:19 1869

原创 Postman会自动使用系统环境变量中设置的代理【坑】

因为Python的一些module安装的原因,在cmd里安装需要配置全局代理。因此在系统环境变量中配置了:HTTP_proxyHTTP_proxy_passHTTP_proxy_user这三个环境变量。但是之后用Postman调试时发现一定会通过这个代理发送请求,就算在PostMan的Proxy页关闭了代理也不行。删除环境变量HTTP_proxy后即正常了。这个坑还是在...

2019-09-11 14:29:26 866

原创 Tomcat8.5.43源码分析-(4)Tomcat启动过程探究 第二部分 Web应用加载

我们回到Tomcat启动过程探究 第一部分的结尾,回到StandardService的初始化方法initInternal()。StandardService的重点方法有四个:engine.init():初始化Servlet引擎,引擎只负责请求的处理不需要考虑请求连接,协议等等。一个Service存在一个对应的Engine。 executor.init():初始化线程池,该线程池可以在组件...

2019-08-16 14:06:57 260

原创 Tomcat8.5.43源码分析-(3)Tomcat生命周期与监听器

在继续Tomcat启动过程源码分析之前,我们先回顾一下Tomcat的生命周期,查看LifeCycle.java类的注释:/** * Common interface for component life cycle methods. Catalina components * may implement this interface (as well as the appropriat...

2019-08-15 11:25:02 335

原创 Tomcat8.5.43源码分析-(2)Tomcat启动过程探究 第一部分

首先,我们复制启动Tomcat时候Console窗口打印的日志,可以见到一些关键路径,个人认为比较重要的地方标注了出来:八月 14, 2019 3:23:50 下午 org.apache.catalina.startup.VersionLoggerListener log信息: Server version: Apache Tomcat/@VERSION@八月 14, 20...

2019-08-14 11:37:51 554

原创 Tomcat8.5.43源码分析-(1)源码导入Eclipse

涉及到Web开发的程序员,想必对各种Web容器很熟悉。那么一个Web容器如何定义?何谓容器,到底存放的是什么东西?怀着这样的疑问,我从图书馆借了一本图灵系列的《Tomcat架构解析》。熟悉了Tomcat的基本概念之后,试图研究Tomcat源码。本博客是记录个人探究Tomcat源码的过程,以供以后拾遗用。进入Tomcat官网,选择版本8.5.43,下载源码:https://tomcat....

2019-08-14 09:52:28 303

原创 Java计算平方根算法

public class SqrtTest{ public static double mySqrt(double num, double offSet){ if(num <= 0) return 0; double flag = 10.0; int counter = 0; do{ if (Math.abs(flag*flag - num) < offSet) {

2016-12-23 15:24:19 6722

原创 Python删除1到100的素数

filter(lambda n: not(0 not in map(lambda x: n%x,range(2,n))), range(1,101))

2016-12-21 15:35:56 3604

原创 C++中字符串取一个字符的一种方法

string strName = "Hello World!";int i = 1;char c = strName.operator [](i);

2016-07-25 10:18:36 3612

原创 fatal error RC1015: cannot open include file ‘afxres.h’ 的一种解决方法

环境VS2008,一个Main project一个动态库project。我的情况是,只有Main project的rc资源文件报错fatal error RC1015: cannot open include file ‘afxres.h’ 。仔细检查,包含路径没有问题,网上检索了很多也找不到答案。最后自己调试出来,是rc属性设置的问题。右键rc文件,修改为:属性——资源——常规——忽

2016-07-08 10:27:33 2769

原创 TopK问题 Java代码

import java.util.Arrays;public class TopK{ public static void main(String[] args){ int [] data = {5,1,2,3,4,0,6,7,8,9}; int k = 1; FindTopK(data, 0, data.length-1, k-1); System.out.println(

2016-07-04 14:44:28 543

原创 AfxGetInstanceHandle()报错解决方法

调试开源工具时,HINSTANCE hinst = AfxGetInstanceHandle();这句话一直报断言错误,原因是afxCurrentInstanceHandle为NULL。解决方案: HINSTANCE hinst = AfxGetInstanceHandle();改为HINSTANCE hinst = GetModuleHandle(NULL);

2016-06-29 15:33:33 5851

原创 归并排序 MergeSort Java代码

public class MergeSort { public static void main(String[] args) { int[] data = {3,2,4,7,2,1,9,11,2,3,15}; mergeSort(data); for(int num : data){ System.out.println(num); } } public sta

2016-06-23 16:57:37 419

原创 快速排序 QuickSort Java代码

public class QuickSort{ public static void main(String[] args){ int[] test = {9,8,45,6,5,4,3,2,4,5,67,4,2,1,0}; quickSort(test); for(int show : test){ System.out.println(show); } } publi

2016-06-22 16:57:25 365

原创 希尔排序 ShellSort Java代码

public class ShellSort { public static void main(String[] args) { int[] num = {3,2,1,5,4,2,8,6,12,2}; shellSort(num); for(int i : num){ System.out.println(i); } } public static void sh

2016-06-22 16:49:51 408

原创 折半二分插入排序Java代码

public class BinaryInsertSort { public static void main(String[] args) { int [] data = {32,22,11,44,55,234,43,12,1,9,65}; binaryInsertSort(data); for(int loop: data){ System.out.println(lo

2016-06-21 14:27:17 316

原创 C++中常见类型转换

C++(MFC)中的常见类型转换1.string 和 CString间的转换。string 转 CStringstring str = "Hello World";CString cStr;cStr = str.c_str();//c_str()生成以'\0'结尾的字符串CString 转 stringCString cStr = "Hello World";

2016-05-19 15:15:07 342

原创 MFC中SetFont(CFont *font)方法容易出错点

在MFC中,我们企图修改控件中的字体,可以使用SetFon(CFont *font)t函数。产生一个CFont对象,如下: CFont* font = new CFont; font->CreateFont(14, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_NORMAL, // n

2016-05-13 14:51:28 7766 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除