自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

集腋成裘

天行健君子以自强不息,地势坤君子以厚德载物

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

原创 2021年书单

书单列表社会类《雄性衰落》—— 菲利普•津巴多《日本世相系列:饱食穷民》—— 斋藤茂男管理类《项目管理知识体系指南》—— [美]Project Management Institute《PMP 5A备考宝典》—— 杨述《认知觉醒:开启自我改变的原动力》—— 周岭技术类《Spring+Spring MVC+MyBatis从零开始学》—— 吴为胜 杨章伟《Redis入门指南》—— 李子骅《Vue.js快速入门》—— 申思维《Java并发编程实战》—— Brian Goetz科普类《女

2021-12-31 22:41:49 3377

原创 局部变量的线程安全性

局部变量是线程安全的,这句话正确,但是也不够准确,关键在于如何理解局部变量。通常都是通过栈帧对线程的私有性,而局部变量保存在栈帧种来解释这句话的正确性。如果局部变量是基本类型,那么这句解释没有问题,正如下面的例子,虽然 local 变量被所有的线程访问,但是初始化后,再去改变它,编译器会报错,这就使其成为了事实上的 final 变量,而被 final 修饰的基本类型变量是线程安全的。 public static void test() { double local = 100.0;

2021-09-06 22:50:42 1360

原创 项目管理思考

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-06-27 17:31:25 271

原创 Spring Boot 知识点

Spring Boot 知识点开启异步线程池使用注解,可以更便捷的使用基于 Executor 框架的线程池。Spring Boot 框架中提供了一个 AsyncConfigurer 接口以及一个默认的 AsyncConfigurerSupport 实现。通过实现该接口,或继承该实现,可以自定义自己的线程池和异常处理操作。@Configuration@EnableAsyncpublic class AsyncConfig implements AsyncConfigurer { @Overri

2021-04-25 18:20:41 211

原创 Spring 框架小结

Spring 框架小结演变在 Spring 框架出现之前,开发一个 EJB(Enterprise Java Bean)需要定义接口并进行大量配置,这些工作繁琐与枯燥超过了开发本身。另外,由 JSP(Java Server Page)生成的 Servlet 是运行在 Web 容器中的,而 EJB 则是运行在 EJB 容器中的,两个容器中服务间的调用又需要新的配置以及网络资源的消耗。2004 年,Spring 1.0 版本发布,其使用控制反转(IoC,Inversion of Control)技术来管理资

2021-04-12 22:46:19 157 1

翻译 命令行截取路径

命令行截取路径在写 bash 脚本时,动态获取了一个文件路径,而想打开该文件所在目录,可以使用通配符来截取父目录路径。格式:${path[##|#|%|%%]<pattern>}现在假设 path 的值为 :/home/cam/book/long.file.name ,给出如下样例:表达式截取结果说明${path##/*/}long.file.name## 表示移除符合通配符的最长字符串${path#/*/}cam/book/long.file.name

2021-03-16 16:27:43 270

原创 Redis 简介二

Redis 简介HyperLogLog 结构HyperLogLog 主要用来做基数统计命令说明pfadd key element1 [element2 ···]向 HyperLogLog 中添加元素pfcount key1 [key2 ···]计算一个或多个 HyperLogLog 的基数pfmerge destkey courcekey1 [sourcekey2 ···]合并多个 HyperLogLog数据集基数,指集合中不重复的元素个数GEO 结构

2021-03-06 23:53:36 99

原创 Redis 简介一

Redis 简介Redis 是一个开源的高性能键值对内存数据库。其所有的数据都保存在内存中,所以相比于其他基于硬盘存储的数据库有着非常快的读写速度,而其对持久化的支持,也减小了数据丢失的风险。随着 Redis 功能的不断丰富,其也不在局限于数据库系统,如为每个键设置生存时间(Time to Live,TTL),则可以将其作为缓存系统来使用。一个 Redis 实例中的所有键值对并不是一个整体,其默认分为 16 个“区”,以 0 到 15 的数字命名,使用 select <index> 命令,

2021-02-28 21:50:36 229

原创 npm 简介

npm 简介简单来说,npm(JavaScript Package Manager)就是一个 JavaScript 包管理工具,通过它可以使用封装好的功能模块,也可以封装自己的功能模块。如果只是简单的使用 npm ,那么可以通过安装 Node.js 来安装 npm 。但如果在实际工作过程中,需要对多个版本的 Node.js 进行测试,或者试图以命令行的方式使用获取的模块功能,则可通过 nvm(Node Version Manager)来安装 npm 来规避版本切换或运行权限的问题。nvm 安装使用 n

2021-01-16 21:35:29 1363

原创 2020年书单

书单列表社会类《娱乐至死》—— 尼尔·波兹曼《中华人民共和国民法典》—— 全国人大法工委小说类《乡村教师》—— 刘慈欣经济类《定投十年财务自由》—— 银行螺丝钉技术类《深入浅出 Spring Boot 2.x》—— 杨开振《网络是怎样连接的》—— 户根勤《Spring Cloud 微服务架构开发实战》—— 董超、胡炽维科普类《人工智能》—— 李开复、王咏刚《火星移民指南》—— 诺伯特·克莱弗特、詹姆斯·卡斯、雷伊·卡斯总结前端、后台、客户端,各种语言、各种技术框架纷繁多样,但

2021-01-04 19:07:09 130 4

原创 蓝牙简介

蓝牙简介1998年,爱立信公司联合 IBM、Intel、Nokia、Toshiba(东芝公司)组建了一个特别兴趣小组(SIG,Special Interest Group),旨在开发一个无线标准,将计算设备、通信设备或其他附件通过短距离、低功耗和低成本的无线电连接起来。基于蓝牙成本的考虑,设计者遵从主从模式,将一个主节点和10米范围内至多7个活跃的从节点设计为一个蓝牙系统的基本单元,称为微网。一个从节点可以连接到多个微网中,从而可以作为桥接点,实现多个微网的连接,可称其为散网。微网的这种体系结构决定了

2020-12-27 21:55:25 585

原创 PGP 简介

PGP 简介什么是 PGPPGP(Pretty Good Privacy,良好的隐私性)是由 Zimmermann 于 1991 年发布的一个完整的电子邮件安全软件包,提供了私密性、认证、数字签名和压缩功能。PGP 使用 IDEA(International Data Encryption Algorithm,国际数据加密算法)128 位的块密码来加密数据,使用 RSA 来管理加密密钥,使用MD5 来保证数据完整性。PGP 接收明文信息,最后输出一个签过名的密文,并且该密文是 Base64 格式。

2020-11-29 23:05:27 3734 1

原创 元注解

元注解@Documented在声明注解时,可以使用该注解进行修饰,表示在使用诸如 javadoc 的工具生成文档时,将该注解作为公共接口的内容体现在文档中。@Target在声明注解时,可以使用该注解进行修饰,并指定相应的值,表示该声明的注解可以应用的范围。其相关的值,可以参考 ElementType 枚举类型。枚举值说明TYPE表示可以修饰诸如类、接口、注解、枚举等类型FIELD表示可以用来修饰类变量、枚举值等域METHOD表示可以修饰方法PARAME

2020-10-18 22:50:20 110

原创 Spring Boot 参数转换

在 Spring MVC 中,使用注解 @RequestMapping 修饰控制器时,其所配置的内容,会在工程的启动阶段保存到处理器映射(HandlerMapping)机制中,当请求连接被拦截后,HandlerMapping 进行匹配,会将对应的处理器和拦截器保存到 HandlerExecutionChain 对象中,并返回给 DispatcherServlet 运行。处理器中包含了控制器,在执行控制器中匹配的方法前,需要先将请求报文中的参数转换为控制器所需要的参数。不使用任何注解,控制器的参数名称

2020-09-24 23:54:50 5476

原创 合并PDF(保留其本身的大小)

在将多个PDF文件合并为一个PDF文件时,通常会创建一个新的 Document 对象,并读取每一个PDF文件的 PdfImportedPage 页,而后使用 PdfCopy 类中的方法将其添加到新创建的PDF文件中,部分代码如下:for (int i = 0; i < fileList.size(); i++) { PdfReader reader = new PdfReader(fileList.get(i)); int n = reader.getNumberOfPages(

2020-09-23 15:22:22 441 1

转载 Lambda 表达式详解

Lambda 简介Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。对接口的要求虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法jdk 8 中

2020-08-31 22:27:30 253

原创 Spring Boot 获取 WAS 配置的 JNDI 数据库连接

在使用 WAS(Websphere Application Server)部署应用时,如果想获取 WAS 中配置的 JDBC 数据库连接,通过 JNDI 来获取数据库连接,需要在部署的应用目录下配置如下文件。websphere 使用JNDI要在ibm-web-bnd.xml和web.xml文件里配置。否则会报找不到相应名字数据源的错误。建议使用IBM Rational Application Developer进行开发。给你个例子:其中ibm-web-bnd.xml和web.xml在同一目录WEB-I

2020-07-28 17:16:33 1657 2

原创 iText 简介

iText 简介iText 是业界使用最为广泛的创建 PDF 的框架,从 iText 5 升级到 iText 7 后,功能模块的划分更加清晰,两者在使用上,有较为明显的区别。使用 Maven 管理工具引入两者的代码如下:<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.1.11</ve

2020-06-26 20:09:50 3825

原创 XSD 小结

XSD 小结在实际开发中,常会遇到一些 XML 类型的配置文件,那么如何去理解其所含的标签,以及正确的进行配置呢!追本溯源,如果想明确 XML 文件中的每一个标签的含义,最好的办法是找到定义这个文档的人问道问道。当然,这是不现实的,好在,XML 文档中提供了一个 XSD 文档地址供我们查阅。XSD,XML Schema Definition,是定义 XML 文档的文档。以 Maven 的 Settings.xml 文件为例:<settings xmlns="http://maven.apa

2020-06-23 00:39:01 256

原创 SystemConfiguration 简介

SystemConfiguration 框架简介在电脑开启时,configd 守护线程便会开启,进行网络配置,而 SystemConfiguration.framework 则是与该线程进行会话,从而管理网络配置的。该框架主要有两个目的,一是提供动态的网络配置,使得用户可以对网络无缝连接,另一个是支持应用对网络的创建、修改以及网络服务的访问。对于简单的网络连接状态变化,该框架中直接提供了一些方法,可以监听相关的状态值,从而避免开发人员去涉及较低层的方法,如常用的 AFNetworking 第三方库就使

2020-05-31 20:25:11 7834

原创 写好博客

写好博客为什么写没有过目不忘的本事,需要记录下所思所想,以备温故知新。并且书写的过程同时是一个整理,思考的过程,有利于查缺补漏,并触发更深层次的思考。写什么问题解决型博客在工作和生活中,遇到一个具体问题,着手进行解决,在最后需要进行记录总结。那么应该阐明事情的的起因、经过和结果。说明问题起因或具体现象,以后再遇到类似的问题,可以参考进行解决。写明处理过程,解决问题的经过是很有总结价值的,包括,一开始对这个问题的产生的原因的猜想,以及为什么这么想,而后去验证,是否顺利,验证猜想不正确后,如

2020-05-31 12:16:59 158

原创 思维方法

思维方法人的精力是有限的,需要将有限的精力投入到最具价值的事情上,那么首先需要分析出什么是最值得做的事情。或者说,我们到底要到达什么目的,而要达成这个目的有哪些方法,这些方法中,哪一个是最快速,最稳妥的,同时结合自身条件,是可执行的。人很难正确的认识自己,不是过于高估自己,就是过于低估自己。并且,一些优缺点在不同的情境下,可能会发生转换。当然,这种情况比较少见,总体来看,还是要先正确认识自己的优缺点,以及当下的机会和风险。SWOT 分析法:Strengths 优势,Weakness 劣势,Oppor

2020-05-17 22:46:26 117

原创 Objective-C 类与实例调用 self 方法的区分

Objective-C 类与实例调用 self 方法的区分声明一个 Person 类,考虑如下代码:id aa = [Person self];id bb = [self self];Person *cc = self;id dd = [cc self];我们知道在 <NSObject> 协议中声明有实例方法:- (instancetype)self;,但是并没有 sel...

2020-05-01 00:06:09 351

原创 Web 工程环境变量配置步骤

有时候因为本地系统权限的限制,无法通过系统设置所需要的环境变量,所以需要在工程中进行配置,以 redis_ip=127.0.0.1 为例,为工程直接设置环境变量。使用 IBM Liberty来部署工程时,需要在 server.env 文件中配置相应的环境变量,如下:使用 Tomcat 部署工程时,需要在 launch configuration 中的 environment 栏中配置相...

2020-04-30 23:55:42 437

原创 NSNotificationCenter 和 NSNotificationQueue 使用

NSNotificationCenter 和 NSNotificationQueue通知中心和通知队列,需要明确的是队列只是缓存通知,并不实际推送通知,但是根据 NSPostingStyle 和 NSNotificationCoalescing 的选择,通知队列可以决定向通知中心传递通知的时机以及是否合并相关的通知。默认通知队列NSNotificationQueue 提供了一个类属性 def...

2020-04-25 23:24:26 819

原创 UIVisualEffectView

UIVisualEffectViewUIVisualEffectView 视图,为其遮盖的视图提供额外的效果,或影响其内部子视图的效果。区分两者主要是 UIVisualEffect 的两个子类 UIBlurEffect 和 UIVibrancyEffect,初始化 UIVisualEffectView 实例对象时需要从两个子类中选择一个,作为视图效果。但是,通常使用 UIVibrancyEf...

2020-04-20 23:35:11 1991

原创 UIScreenMode

UIScreenModeUIScreenMode 是个很简单的类,用来描述屏幕的信息,其只有以下两个属性,并且都是只读的。size,表示屏幕的宽高,单位是像素。同样也表示了底层显示缓冲区的大小。pixelAspectRatio,像素的横纵比,是像素的宽度与高度的比值,在 iPhone 和 iPad 上一般都是 1 。鉴于这两个属性都是只读的,所以应当从 UIScreen 获取相应的 U...

2020-04-13 11:04:34 450

原创 Apple 设备尺寸

Apple 设备尺寸iPhone 设备设备名(推出年份)对角线尺寸(英寸)分辨率(像素)PPIAsset点状态栏高度(点)虚拟Home键高度(点)iPhone 11 Pro(2019)5.82436*1125458@3x812*3754434iPhone 11 Pro Max(2019)6.52688*1242458@3x896*4...

2020-04-08 22:55:17 719

原创 UIWindow

UIWindowUIWindow 虽然是 UIView 的子类,但却是所有 UIView 视图的容器。想要为其添加视图,可以直接使用父类中的 addSubview 方法,也可以为其 rootViewController 属性赋值,如此控制器的视图会自动添加到该窗口中,前提是控制器的视图没有父视图。应当注意的是,下面两个方法并没有进行什么操作,也不能将窗口设置为主窗口或取消主窗口。- (voi...

2020-03-30 23:35:02 126

原创 随笔

随笔如果向一个 NSMutableArray 中添加一个弱引用类型的对象,会有什么情况?如果该弱引用是用 weak 修饰的,那么,如果在添加时,其所指向的对象已经没有其他强引用指向它,那么,程序会崩溃,因为变量已经被置为 nil ,如下,同样使用 __weak 修饰,添加 NSString 和 NSMutableString 类型到数组中时,前者成功,而后者失败。self.list ...

2020-03-29 16:18:51 223

原创 Core Foundation 内存管理简介

Core Foundation 内存管理简记对象引用的强弱在 Core Foundation 中,函数的名称中含有 create 或 copy 的,那么变量对返回对象为强引用,如果是含有 get 的函数返回的对象,则对其为弱引用。如此,需要根据具体情况,使用 CFRetain 和 CFRelease 对变量进行持有或释放,从而修改对象的引用计数。除此之外,还可以通过 CFGetRetainC...

2020-03-26 22:04:06 572

原创 NSTimer

NSTimer定时器类中的方法十分简单,需要注意的只有下面几点:创建后,需要添加到运行循环中,才会生效。对于反复执行的定时器,注意循环引用的问题。传递的触发时间间隔应为正数,否则默认为 0.1 毫秒。定时器并不是精确的,除了系统保留的误差时间外,还可以通过 tolerance 属性设置自己的误差值,一般是时间间隔的 10% 。定时器会在触发时间和触发时间加误差值之间触发,在此之前,不...

2020-03-15 14:26:29 150

原创 UIDevice

UIDeviceUIDevice 类的单例描述了当前设备的一些设备信息,如设备名称、设备类型、系统名及版本号、电池状态、进近传感器状态、设备姿态等信息。可以通过注册如下通知,来获取相关变化。UIDeviceOrientationDidChangeNotificationUIDeviceBatteryStateDidChangeNotificationUIDeviceBatteryLev...

2020-03-03 22:21:16 942

原创 iOS AES 加密

iOS AES 加密下面的方法可以指定操作方式对文本进行加密或解密,还可以指定密钥的长度。这里 AES 加解密指定的是 ECB 模式,kCCOptionPKCS7Padding 填充方式。当然,实际上 iOS 只支持 kCCOptionPKCS7Padding 一种填充方式,或者不填充,并且 CCCrypt(...) 函数默认的是 CBC 模式。+ (NSData *)crypt:(NSDa...

2020-02-28 18:34:15 385

原创 NSRunLoop

NSRunLoop可以使用 NSRunLoop 类中的方法开启一个线程的运行循环,其主要的开启方法有下面 3 种,但实际上前两种方法都是通过反复调用第三种方法实现的。只是第一个没有过期时间限制,而第二个有时间限制,但两种开启方法默认的循环模式都是 NSDefaultRunLoopMode 。- (void)run; - (void)runUntilDate:(NSDate *)limitDa...

2020-02-25 23:46:44 193

转载 iOS 13 Scene Delegate and multiple windows

iOS 13 Scene Delegate and multiple windowsiOS 13的一大改进就是支持multiple windows(多窗口)功能,虽然多窗口仅在iPadOS上获得支持,但这已经是一个很大到的进步,它将会大大提升一些场景的使用体验。本文将结合WWDC 2019相关topic介绍与多窗口相关的内容。Scene Delegate为了实现多窗口功能,苹果修改了使用...

2020-02-24 22:32:55 2098

原创 volatile

在多线程中,一个互斥锁包含了内存屏障来确保加载和存储操作是按照正确顺序的。但是,这并不表示没有问题。因为编译器在优化代码时,可能会将变量加载到寄存器中,以便提升性能。此时,如果该变量时对其他线程可见的,那么这种优化会导致该变量在寄存器中的变化不被其他线程获知。反之亦然,如果变量随时会被编译器无法检测到的外部源修改,那么这种优化亦是不被提倡的,所以可以使用关键字 volatile 修饰重要变量,告...

2020-02-08 23:44:00 114

原创 线程

线程在一个进程中,一个线程有生有死,若要线程不死不灭,那么需要一个死循环,但是如果由线程不断的轮询任务是否存在,则太耗费性能,所以引入 运行循环 来为线程监听事件。如果没有监听到事件时,就使线程休眠。发出事件的称为事件源,事件源可以分为输入源和定时源。脱离/独立线程 和 可连接/非独立线程一般而言,应用程序的主线程都是以非独立的方式创建的,而其他可选的工作都是创建独立线程进行处理。当程序被...

2020-01-31 20:55:32 115

原创 关闭Java提示代码直接键入

使用 Eclipse 编写 Java 代码时,通常在首选项中将所有的字母都添加代码提示的配置中。但是,在实际编写过程中,存在点击空格,提示的代码直接键入的情况,尤其是在定义变量名称时,所以可以通过取消下面的选项,来取消提示代码的自动键入。...

2020-01-27 17:38:25 264

原创 Perspectives

如上图,在使用集成开发平台编写 Java 代码时,可以根据需要自定义 Perspective,而所有的 Perspective 都可以在首选项中的 general->Perspectives 中查看。通常,我们希望自定义自己的调试界面,并且当调试时,自动打开自定义的调试界面。那么可以在首选项中,点击 Run/Debug-> Perspective 选项,查看所有应用类型及其加载...

2020-01-22 22:53:17 571

空空如也

空空如也

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

TA关注的人

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