随手笔记
文章平均质量分 82
HB荷包
知识共享,资源共享,共同进步!
展开
-
全是满满的技术文档
*************************************话不多说-先上教程 **********************************完整躺赚教程(不需任何技术,照做就能赚钱):点击此处获取 提取码:6666被动收入教程(需要一定的技术,会搭建服务器,会发布项目<教程里面会教你>):点击此处获取 提取码:vs3f*************************************话不多说-先上教程 *************************原创 2022-02-11 11:10:23 · 503 阅读 · 1 评论 -
三年java经验应该会什么?
*************************************优雅的分割线 **********************************分享一波:程序员赚外快-必看的巅峰干货如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程请关注微信公众号:HB荷包一个能让你学习技术和赚钱方法的公众号,持续更新*************************************优雅的分割线 **********************************我认为三年对原创 2020-12-23 09:47:47 · 1005 阅读 · 1 评论 -
一年Java经验应该会些什么
1.引言毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西。这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东西,为大家分享一下。经过一年意识到以前也有很多认识误区,比如:偏爱收集,经常收集各种资料视频塞满一个个硬盘,然后心满意足的看着容量不行动。不重基础,总觉得很多基础东西不需要再看了,其实不懂的地方很多,计算机程序方面任何一个结果都必有原因,不要只会用不知道原理,那是加工厂出来的。现在id原创 2020-12-23 09:47:09 · 1977 阅读 · 0 评论 -
两年Java工作经验应该会些什么技术
1)集合相关问题:HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。HashMap和Hashtable的区别。ArrayList、LinkedList、Vector的区别。HashMap和ConcurrentHashMap的区别。HashMap和LinkedHashMap的区别。HashMap是线程安全的吗。ConcurrentHashMap是怎么实现线程安全的。2)线程相关问题:创建线程的3种方式。什么是原创 2020-12-23 09:46:18 · 700 阅读 · 0 评论 -
一年java工作经验-面试总结
前言找出自己工作以来开发过的最叼的功能,将整个功能的流程和涉及的东西吃透。项目是面试中必问的环节,一般是以一个功能点为基础展开问,因此你必须对这个功能有很深的认识,不能有模糊的地方。如果有时间,能把涉及到的知识点也搞懂最好。做面试题有不少公司是有面试的,如果你没有准备过,很容易在各种小地方犯错,建议去一些面试题网站多做些题目,我自己是用的牛客网。学习记录把自己每天的学习时间和学习内容记录下来,可以让自己更有动力的学习,学习是一个枯燥的过程,你必须让自己时刻保持有动力。投简历、约面试环节在哪些网原创 2020-12-23 09:45:13 · 2018 阅读 · 0 评论 -
Mybatis组成部分
从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个:** SqlSession:**作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能;**Executor:**MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护;**StatementHandler:**封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。*原创 2020-12-20 14:28:46 · 155 阅读 · 0 评论 -
Java版数据结构与算法——线性表
五、线性表线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列前驱元素: 若A元素在B元素的前面,则称A为B的前驱元素后继元素: 若B元素在A元素的后面,则称B为A的后继元素线性表的特征:第一个数据元素没有前驱,这个数据元素被称为头结点;最后一个数据元素没有后继,这个数据元素被称为尾结点;除了第一个和最后一个数据元素外,其他数据元素有且仅有一个前驱和一个后继。如果把线性表用数学语言来定义,则可以表示为(a1,…ai-1,ai,ai+1,…an原创 2020-12-20 14:27:46 · 270 阅读 · 0 评论 -
注解版poi操作工具
最近在搭公司新项目的架构,测试的过程中深感导出Excel极为不便,因此就产生了写一个通用导出工具类的想法。写完后经测试发现比较好用,因此将公司相关的代码移除,单独拿出来这个模块进行开源。项目的GitHub地址:POI操作工具如果您对本工具比较感兴趣,可以加入下面QQ群进行技术交流:781943947使用方式:创建数据库(这个操作就不贴代码了)导入工程下db目录的数据库创建类ApiLog(实际开发中换成自己的类),加上注解@Excel@Datapublic class ApiLog imple原创 2020-12-20 14:26:56 · 163 阅读 · 0 评论 -
多线程中ThreadLocal的使用
前言多线程是Java的一个重要特性,多线程从某方面可以等价于多任务,当你有多个任务要处理时,多个任务一起做所消耗的时间肯定比任务串行起来做,所消耗的时间短。而对于多线程不熟悉的新手则容易踩到很多坑,最典型的则是变量问题。概念介绍下面先用简单粗俗的语言解释一下几个基本概念线程安全:多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。典型的例子为StringBuffer类。线程不安全:不提供数据原创 2020-12-20 14:25:47 · 712 阅读 · 0 评论 -
volatile关键字的使用
前言在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加了volatile修饰符的变量则是直接读写主存。Volatile解决数据可见性问题Volatile 保证了线程间共享变量的及时可见性,但不能保证原子性用到多线程做全局共享时,最好加上volatile关键字以下代码,把flag改为false之后,程序依然不停止。因为主线程把flag改成false,还没有把这个值刷新到子线程,子线程读取的flag依然是本地内存的。只需要在fl原创 2020-12-20 14:24:52 · 95 阅读 · 0 评论 -
Flutter、ReactNative、uniapp对比
前言最近对App开发比较感兴趣,因原生学习起来成本可能较大,就把目光转向了大前端的跨端开发技术。说到跨端开发,那么选择空间就是Flutter、RN、uniapp这几个了。flutter最近比较热闹,毕竟是谷歌出品。但我们不是炒作热点的媒体,也不是忽悠你交学费的培训机构,我们作为实际的跨平台开发者,冷静的分析下这个东东。flutter是Google为Fuchsia操作系统设计的应用开发方式。Fuchsia OS要兼容廉价物联网设备,要求对硬件的消耗降低,并且为了避免与oracle的java打官司,Fu原创 2020-12-20 14:22:57 · 6047 阅读 · 1 评论 -
Mybatis源码阅读(一):Mybatis初始化1.1 解析properties、settings
前言笔者大概是从今年的5月份开始喜欢上源码阅读的,起初是阅读徐郡明前辈的《Mybatis技术内幕》入的坑,不得不说大佬就是大佬,书中讲得东西很细很全。半年过去了,笔者对mybatis略知一二,也开始在为公司搭架构,并且基于Mybatis写了一套框架,但是尽管如此还是感觉自己对于源码的理解稍微有点浅。好比是初高中学数学吧,光看例题不做题是记不住的,因此产生了为mybatis写注释的想法,想要通过写注释的过程,加强对mybatis的理解。虽然现在网上已经有了较全的mybatis中文注释,但是感觉还是经过自己手原创 2020-12-20 14:21:54 · 133 阅读 · 0 评论 -
Mybatis源码阅读(五 ):接口层——SqlSession
SqlSessionSqlSession是Mybatis的核心接口之一,对外提供常用的数据库操作api。mybatis提供了两个SqlSession的实现,其中最常用的是DefaultSqlSession。SqlSession的代码如下/**接口层,也是开发人员使用mybatis去操作sql所使用的主要的接口@author Clinton Begin*/public interface SqlSession extends Closeable {/**查询sql单条数据@p原创 2020-12-20 14:20:46 · 267 阅读 · 0 评论 -
Mybatis源码阅读(四):核心接口4.2——Executor(下)
SimpleExecutor接上一章博客继续。SImpleExecutor继承了BaseExecutor类,是最简单的Executor实现。Executor使用了模板方法模式,所以SimpleExecutor不必在关心一级缓存等操作,只需要实现基本的4个方法。首先看doQuery/** * 执行查询操作 * @param ms * @param parameter * @param rowBounds * @param resultHandler * @param boundSql *原创 2020-12-20 14:19:50 · 77 阅读 · 0 评论 -
Mybatis源码阅读(四):核心接口4.2——Executor(上)
ExecutorExecutor是Mybatis的核心接口之一,其中定义了数据库操作的基本方法。在实际应用中涉及的SqlSession的操作都是基于Executor实现的。Executor代码如下。/**Mybatis的核心接口,定义了操作数据库的方法SqlSession接口的功能都是基于Executor实现的@author Clinton Begin*/public interface Executor {ResultHandler NO_RESULT_HANDLER = nu原创 2020-12-19 17:19:55 · 140 阅读 · 0 评论 -
Mybatis源码阅读(四):核心接口4.1——StatementHandler
前言难得复工了,公司百业待兴,有一大堆接口需要对接,忙的不行。回过神来发现自己快一个月没写博客了,赶紧抽时间写一写,不能断更。截止上一篇博客,我们已经把结果集映射的内容介绍完毕,接下来就是对Mybatis中的核心接口进行介绍,通过介绍这些核心接口,使读者们更深刻地理解Mybatis的运行机制以及原理。StatementHandlerStatementHandler接口是Mybatis的核心接口之一,它完成了Mybatis中最核心的工作,也是Executor接口实现的基础。StatementHand原创 2020-12-19 17:18:43 · 95 阅读 · 0 评论 -
Mybatis源码阅读(三):结果集映射3.3 —— 主键生成策略
前言在前面两篇博客中,我们介绍了对于select语句的简单映射和嵌套映射。mybatis中使用ResultHandler等一系列的类,将查询结果封装到实体类中,可以说是mybatis中最复杂的过程,而剩下的insert、update、delete语句的操作则显得较为简单,没有复杂的映射逻辑。这里需要提的是在insert语句中,关于主键自增的问题。KeyGenerator在我们实际的开发中,自增主键还是使用比较多的。而mybatis在处理insert语句时,并不会将自增主键给返回,而是返回插入的条数。当原创 2020-12-19 17:17:31 · 109 阅读 · 0 评论 -
Mybatis源码阅读(三):结果集映射3.2 —— 嵌套映射
前言这段时间疫情原因躺在家做咸鱼,代码也没怎么敲,源码也没怎么看,博客拖更了一个月,今天心血来潮继续读了点源码,晚上正好抽空发个博客,证明我还活着。关于结果集映射,在一个月前的博客中已经将简单映射给讲述完毕,在实际应用中,除了单表查询以外,还可能通过连表查询多张表的记录,这些记录需要映射成多个java对象,而对象之间存在一对一、一对多等复杂的关联关系,这时候就需要嵌套映射。handleRowValues在前面的一篇博客中提到,结果集映射的核心方法是handleRowValues,在这个方法中,会先判原创 2020-12-19 17:16:39 · 308 阅读 · 0 评论 -
Mybatis源码阅读(三):结果集映射3.1 —— ResultSetBuilder与简单映射
前言在前面的文章中,已经介绍了三种SqlSource的代码,下面开始介绍执行select语句对查询结果集封装的过程。ResultSetHandler前面的文章中得知,mybatis会将结果集按照映射配置文件中定义的映射规则,如resultMap节点,映射成相应的结果对象。在StatementHandler接口执行完指定的select语句后,会将查询结果集交给ResultSetHandler完成映射处理。ResultSetHandler接口代码如下:/**处理select查询的结果集@原创 2020-12-19 16:54:31 · 290 阅读 · 0 评论 -
Mybatis源码阅读(二):动态节点解析2.2 —— SqlSourceBuilder与三种SqlSource
SqlSourceBuilder前面我们对SqlSource和SqlNode进行了介绍,在经过SqlNode.apply方法的解析之后,Sql语句会被传递到SqlSourceBuilder中进行进一步的解析。SqlSourceBuilder主要完成了两方面的操作,一方面是解析Sql中的#{}占位符定义的属性,如jdbcType、javaType(使用较少),一方面是把#{}占位符替换成?占位符SqlSourceBuilder代码如下/**用于进一步解析SqlSource中的${}@auth原创 2020-12-19 16:53:21 · 172 阅读 · 1 评论 -
Mybatis源码阅读(二):动态节点解析2.1 —— SqlSource和SqlNode
前言前面的文章介绍了mybatis核心配置文件和mapper文件的解析,之后因为加班比较重,加上个人也比较懒,一拖就是将近半个月,今天抽空开始第二部分的阅读。由前面的文章可知,mapper文件中定义的Sql节点会被解析成MappedStatement,其中的SQL语句会被解析成SqlSource。而Sql语句中定义的动态sql节点(如if节点、foreach节点)会被解析成SqlNode。SqlNode节点的解析中会使用到Ognl表达式(没错就是是struts2用的那玩意。本以为随着struts2和js原创 2020-12-19 16:52:13 · 164 阅读 · 0 评论 -
Mybatis源码阅读(一):Mybatis初始化1.3 —— 解析sql片段和sql节点
前言接上一篇博客,解析核心配置文件的流程还剩两块。Mybatis初始化1.2 —— 解析别名、插件、对象工厂、反射工具箱、环境本想着只是两个模块,随便写写就完事,没想到内容还不少,加上最近几天事情比较多,就没怎么更新,几天抽空编写剩下两块代码。解析sql片段sql节点配置在Mapper.xml文件中,用于配置一些常用的sql片段。/** * 解析sql节点。 * sql节点用于定义一些常用的sql片段 * @param list */private void sqlElement(Lis原创 2020-12-19 16:50:58 · 144 阅读 · 0 评论 -
Mybatis源码阅读(一):Mybatis初始化1.2 —— 解析别名、插件、对象工厂、反射工具箱、环境
接上一节 上一节:解析properties和settings解析typeAliasestypeAliases节点用于配置别名。别名在mapper中使用resultType时会使用到,是对实体类的简写。别名有两种配置方式通过package,直接扫描指定包下所有的类,注册别名通过typeAliase,指定某个类为其注册别名别名注册代码如下/** * 解析typeAliases节点 * * @param parent */private void typeAliasesElement(X原创 2020-12-19 16:17:32 · 123 阅读 · 0 评论 -
Mybatis源码阅读(一):Mybatis初始化1.1 解析properties、settings
前言笔者大概是从今年的5月份开始喜欢上源码阅读的,起初是阅读徐郡明前辈的《Mybatis技术内幕》入的坑,不得不说大佬就是大佬,书中讲得东西很细很全。半年过去了,笔者对mybatis略知一二,也开始在为公司搭架构,并且基于Mybatis写了一套框架,但是尽管如此还是感觉自己对于源码的理解稍微有点浅。好比是初高中学数学吧,光看例题不做题是记不住的,因此产生了为mybatis写注释的想法,想要通过写注释的过程,加强对mybatis的理解。虽然现在网上已经有了较全的mybatis中文注释,但是感觉还是经过自己手原创 2020-12-19 16:15:13 · 88 阅读 · 0 评论 -
程序员的自我修养——远离“外包思维”
在我们做开发的日子里,不免会进行跳槽,跳来跳去公司无非就分成两大类——互联网公司、外包公司。当然我们本次讨论的并不是外包公司,而是一些外包公司所培养出来的“外包思维”。什么是 “外包思维”呢?简单来说,就是由多年外包经历所影响,逐渐总结出来的一些工作经验。事实上并不是所有的工作经验都对大家有帮助,有些工作经验反而只会坑到你。那么下面我们来看看有哪些常见的“外包思维”吧。技术是为业务服务的单看这句话其实说的并没有毛病,但是不少程序员却对这句话进行了曲解。每个技术的出现都有它的适用场景,比如MongoD原创 2020-12-18 16:23:49 · 279 阅读 · 0 评论 -
GET和POST请求到底有什么区别?
看到这个标题,想必大部分人都已经想关掉这篇博客了。先别急,你真的知道这两个的区别吗?做过WEB开发的朋友可能很熟悉,看到这个问题能立马脱口而出二者的区别。GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传原创 2020-12-18 16:23:00 · 177 阅读 · 0 评论 -
Java如何只使用位运算实现加减乘除
前言接前面一篇博客,这又是某个公司的奇葩面试题(都说了到底是哪家公司才会出这种没营养的面试题)。不过吐槽归吐槽,这个题目还是有点学问的,比前面那个 不使用比较运算符如何比较两个数的大小 强多了(但是还是能看出面试官是在存心刁难人)。原题是“只给加法,如何实现减乘除”,我寻思着,既然减乘除都不给了,那就加大点难度,加法也别给了吧,今天就手动去实现加减乘除。这里只实现int类型的加减乘除。一说到这种“不给xxx如何实现xxx的问题”,那第一个想到的就是位运算,因此本篇博客的各种运算也是基于位运算的。关于位原创 2020-12-18 16:17:06 · 282 阅读 · 0 评论 -
Java中如何使用非阻塞异步编程——CompletableFuture
前言对于Node开发者来说,非阻塞异步编程是他们引以为傲的地方。而在JDK8中,也引入了非阻塞异步编程的概念。所谓非阻塞异步编程,就是一种不需要等待返回结果的多线程的回调方法的封装。使用非阻塞异步编程,可以很大程度上解决高并发场景的各种问题,提高程序的运行效率。为什么要使用非阻塞异步编程在jdk8之前,我们使用java的多线程编程,一般是通过Runnable中的run方法进行的。这种方法有个明显的缺点:没有返回值。这时候,大家会使用Callable+Future的方式去实现,代码如下。public原创 2020-12-18 16:15:17 · 353 阅读 · 0 评论 -
不使用比较运算符如何比较两个数的大小
前言今天在水群的过程中看到有位群员谈论到这个话题,是他找工作过程中某家公司的面试题(到底是哪家公司才会出这种没营养的题目刁难别人),有点兴趣,就开始写了。开搞想了一下,其实就是题目怪了一点,难度其实并不高。这个题目让我想起了前两年看到的题目,只给你加法,怎么计算加减乘除(都说了到底是哪家公司才会出这种没营养的题目)。相比起来,这题好歹是考了计算机中的加法器,而本文主题中谈论的题目则真的是毫无营养。思路其实很明显,位运算,这类题目一般都是要用位运算的。这里需要使用到无符号右移。首先,既然不允许直接比原创 2020-12-18 16:11:57 · 1570 阅读 · 0 评论 -
为什么varchar字段长度最好是2的n次方-1
计算机是二进制计算的,1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是-128到127。而varchar类型存储变长字段的字符类型,当存储的字符串长度小于255字节时,其需要1字节的空间,当大于255字节时,需要2字节的空间。使用2 ^ n长度是更好的磁盘或内存块对齐。对齐块更快。今天“块”的大小更大,内存和磁盘足够快,可以忽略对齐,对于非常大的块来说是非常重要的。所以使用(2^n)-1 可以更好的利用磁盘空间和内存,使数据库可以在最大限原创 2020-12-18 16:09:19 · 1900 阅读 · 1 评论 -
数据结构与算法——二叉树、堆、优先队列
七、树7.1 树7.1.1 树的定义树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如族谱、单位的组织架构、等等。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树树具有以下特点:每个结点有零个或多个子结点;没有父结点的结点为根结点;每一个非根结点只有一个父结点;每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的父结点的一个子树;7.1.2 树的相关术语结点的度:一个原创 2020-12-18 16:07:58 · 208 阅读 · 0 评论 -
JDK8那些惊为天人的新特性
介绍随着java的发展,越来越多的企业开始使用 java8 版本。Java8 是自 java5之后最重要的版本,这个版本包含语言、编译器、库、工具、JVM等方面的十多个新特性。本次课程将着重学习其中的一些重点特性。Jdk8新增的特性如下:Lambda表达式 类似于ES6中的箭头函数新的日期API Datetime引入Optional 防止空指针异常使用Base64接口的默认方法和静态方法新增方法引用格式新增Stream类注解相关的改变支持并行(parallel)数组对并发类(Conc原创 2020-12-18 16:06:12 · 132 阅读 · 1 评论 -
程序员到底要不要重复造轮子?
关于这个话题,现在这里阐述立场:就公司工作而言,不建议重复造轮子。就个人技术而言,强烈建议造轮子!程序员圈子里流行这么一句话:“不要重复造轮子”。它的原文是:“Stop Trying to Reinvent the Wheel”,意思是“不要重复发明轮子”。首先我们要搞清楚两个概念 —— 造轮子和发明轮子。轮子是在距今6800年前被发明出来,在此之前我们的祖先可能已经就在尝试对轮子的创造。从三角形、四边形、五边形等等,一直到最后的圆形轮子,每种轮子都不一样,这叫做发明轮子。而当轮子的形状确定后,再发明原创 2020-12-18 16:01:47 · 368 阅读 · 0 评论 -
String s = new String(123) 究竟创建了几个对象
前言今天上班划水的过程中有人询问到这个问题,网上对于这个问题也有争议,有说创建了一个对象,有说两个,有说三个。首先说三个的肯定是扯淡了,今天来讨论一下这条语句到底创建了几个对象。在进入正题之前,先回顾一下几个基础知识。常量池常量池是为了避免对对象的重复创建和销毁而影响系统性能,从而实现对象共享。在编译期就能确定的字符串,会被存放到常量池中,如String s = “123”;。此后如果使用到123这个字符串,就会直接从常量池中获取,而不用每次都再new一个123出来。关于常量池更详细的知识点,请阅原创 2020-12-18 16:00:26 · 560 阅读 · 0 评论 -
count(1),count(*),count(主键) 性能对比及辟谣
前言前段时间关于统计数量的sql问题和朋友进行了讨论,网上关于这三种查询方式说法不一,主要有以下两种说法。count(*) = count(主键) > count(1)count(主键) > count(*) > count(1)今天对这三种方式进行探究。数据库为mysql 5.7.12,引擎为InnoDB。建表CREATE TABLE user (id int(32) NOT NULL AUTO_INCREMENT,name varchar(500) DEFAULT原创 2020-12-17 14:23:27 · 286 阅读 · 0 评论 -
详解垃圾回收算法
标记清除算法概念该算法有两个阶段。标记阶段:找到所有可访问的对象,做个标记。清除阶段:遍历堆,把未被标记的对象回收缺点:会产生碎片,不够连贯应用场景该算法一般应用于老年代,因为老年代的对象生命周期比较长。优缺点标记清除算法的优点和缺点优点是可以解决循环引用的问题必要时才回收(内存不足时)缺点:回收时,应用需要挂起,也就是stop the world。标记和清除的效率不高,尤其是要扫描的对象比较多的时候会造成内存碎片(会导致明明有内存原创 2020-12-17 14:07:25 · 70 阅读 · 0 评论 -
jvm详解 - 新生代与老年代
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。其中新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆的内存模型大致为:默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参原创 2020-12-17 14:04:44 · 175 阅读 · 0 评论 -
jvm形象简介之一看就懂
据 JVM 规范,JVM 内存结构共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。这里的java内存结构与前面所述的Java内存模型是两个概念,不可以混淆。堆java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配(从这一特性上来说,数组其实也算是一种对象)。java堆是垃圾收集器管理的主要区域,因此也被成为“GC堆”。从内存回收角原创 2020-12-17 11:54:42 · 95 阅读 · 0 评论 -
详解:设计模式之-策略设计模式
什么是策略模式定义一系列的算法,并将每一个算法单独进行封装,而且使它们可以相互替换,从而达到传递不同参数而执行不同算法的结果。策略模式让算法独立于使用它的客户而独立变化策略模式应用场景策略模式的用意是针对一组算法或逻辑,将每一个算法或逻辑封装到具有共同接口的独立的类中,从而使得它们之间可以相互替换。策略模式使得算法或逻辑可以在不影响到客户端的情况下发生变化。说到策略模式就不得不提及OCP(Open Closed Principle) 开闭原则,即对扩展开放,对修改关闭。策略模式的出现很好地诠释了开闭原创 2020-12-17 11:52:15 · 143 阅读 · 0 评论 -
详解:设计模式之-适配器模式
简介在设计模式中,适配器模式有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。分类适配器分为,类适配器、对象适配、接口适配方式类适配器方式采用继承方式,对象适配方式使用构造函数传递适配器案例我们就拿日本电饭煲的例子进行说明,日本电饭煲电源接口标准是110V电压,而中国标准电压接口是220V,所以要想在中国用日本电饭煲,需要一个电源转换器日本110V电源接口public interf原创 2020-12-17 11:49:36 · 103 阅读 · 0 评论