自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 收藏
  • 关注

原创 BIGDATA-redis

01.NoSQL入门概述1.互联网时代背景下大机遇,为什么用NoSQL1.单机MySQL的美好年代在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。DAL dal是数据访问层的英文缩写,即为数据访问层(Data Access Layer)上述架构下,我们来看看数据存储的瓶颈是什么?1. 数据量的总大小一个机器放不下时2. 数据的索引(B+ Tree)一个机器的内存放不下时3. 访问量(读写混合)一个实例不能承

2021-01-25 16:05:05 356

原创 报错-新建maven项目Could not transfer artifact......

解决Could not transfer metadata org.apache.maven.plugins:maven-archetype-plugin/maven-metadata.xml fro错误显示的主要意思是说访问不到阿里的镜像服务器,然后一些依赖的包就下载不下来。搜索到的解决方案主要是说maven里的settings文件中没有配置阿里的镜像服务器,也有的说是网速的问题,毕竟公司的网速太感人了。我觉得这两个地方都有可能出现问题。但是经过测试,问题依然没有解决。如果大家也遇到这种问题,接下来就给

2021-01-17 21:49:18 11681

原创 mac安装redis

使用Homebrew安装Redis1、没有安装Homebrew,首先安装npm国内的吧,快一些。打开终端输入以下命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"如果安装报错error: could not lock config file /usr/local/Homebrew/.git/config: Permission deniedfa

2021-01-17 20:12:51 224

原创 idea调试SpringMvc, 出现:”Can‘t find catalina.jar“错误的解决方法

idea构建的项目,点击运行出现以下错误提示:Error running PraticeWeb: Can’t find catalina.jar 21:54 Error running PraticeWeb Invalid arguments : Already listening [timeout, port, localAddress]检查tomcat配置发现:File -> Setting -> Build,Execution,Deployment -> Application

2021-01-05 19:02:42 1256

原创 框架知识-spring-第四章:认识spring+事务

事务1. 什么是事务事务是数据库操作最基础的单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败事务四个特点 1. 原子性 2. 一致性 3. 隔离性 4. 持久性声明式事务管理1.xml配置 2.注解事务参数参数讲解1.propagation:事务的传播行为2.ioslation 事务的隔离行为3.timeout:超时时间4.readOnly:是否只读5.rollbackFor: 回滚1.propagation:事务的传播行为多事

2021-01-04 22:09:38 199

原创 框架知识-spring-第三章:认识spring+JDBCTemplate

1、jdbctemplate:1.方便操作jdbc操作数据库2、操作1.引入相关jar包mysql和druid数据库连接池的jar包代码Bookpackage com.changxiong.spring.entity;/** * @author changxiong * @create 2020-12-30-10:30 PM */public class Book { private String id; private String name; pri

2021-01-04 21:06:19 116

原创 框架知识-spring-第二章:认识spring+Aop

aopaop底层原理—动态代理代理模式;使用的是动态代理,1.一种是有接口的模式 jdk动态代理2.一种是没有接口的模式 cglib 创建当前类子类为代理对象对对应的方法来增强参考 代理模式:https://blog.youkuaiyun.com/u014692224/article/details/110881181aop的术语1.连接点类里面那些方法可以增强,这些方法就叫连接点2.切入点实际真正增强的方法称为切入点3.通知1)实际增强逻辑部分2)通知类型分类- 前置通知- 后置通知

2021-01-04 20:32:35 102

原创 框架知识-spring-第一章:认识spring+ioc

1.什么是spring

2021-01-04 19:40:14 225

原创 Cause: java.sql.SQLException: Unknown initial character set index ‘255‘ received from server.

原因:驱动与数据库字符集不匹配解决方法:1、换一个新版本的mysql-connector-java。5.1.44的character_set_server和character_set_database系统变量的默认值已从latin1更改为 utf8mb4。<!--dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId&gt

2020-12-30 23:29:22 124

原创 struts2-总结篇

第一节struts2框架应用在javaee三层中web层框架,是轻量级框架struts2在struts1和webwork基础之上发展全新的框架之前web阶段提交表单时候到servlet里面,现在开始不写servlet,使用struts2实现之前servlet的功能struts2框架版本(1)hibernate5.x(2)struts2.3.24解压文件之后,有目录结构2 常见web层框架1 struts12 webwork3 springMVC(常用)3.web层框架特点只要框

2020-12-24 21:37:56 442 1

原创 jvm-第17章:垃圾回收器

1、GC 分类与性能指标1.1、垃圾回收器概述与分类垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enumAPI层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字

2020-12-23 16:35:19 557

原创 jvm-第16章:垃圾回收相关概念

1、System.gc() 的理解1.1、System.gc() 方法System.gc() 方法在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立即生效)JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的

2020-12-22 22:39:15 207

原创 jvm-第15章:垃圾回收相关算法

垃圾回收算法1、标记阶段:引用计数器1.1、标记阶段的目的垃圾标记阶段:判断对象是否存活在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法和可达性

2020-12-22 20:34:50 207

原创 jvm-第14章:垃圾回收概述

1.垃圾回收概述回顾 JVM 学习路线关于垃圾收集Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然

2020-12-22 15:37:09 174

原创 jvm-第13章:StringTable

1、String 的基本特性1.1、String 概述String 的概述String:字符串,使用一对 “” 引起来表示String s1 = "mogublog" ; // 字面量的定义方式String s2 = new String("moxi"); // new 对象的方式String声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小string在j

2020-12-22 13:46:28 175

原创 jvm-第12章:执行引擎

1、执行引擎概述执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器1.1、执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运

2020-12-21 17:33:19 217

原创 jvm-第11章:直接内存

1、直接内存概述直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区/** * IO NIO (New IO / N

2020-12-21 13:50:11 177

原创 jvm-第10章:对象实例化内存布局与访问定位

1.对象实例化美团:对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服:二面:java对象头里有什么对象实例化1.1、对象创建的方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 publicConstructor的newInstance(Xxxx):反射的方式,可以调用空参的,或者带参的构造器使用clone

2020-12-21 12:09:53 138

原创 jvm-第九章:方法区

1、栈 堆 方法区的交互关系从内存结构来看这次所讲述的是运行时数据区的最后一个部分从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及独立会话管理栈、堆、方法区的交互关系下面就涉及了对象的访问定位Person 类的 .class 信息存放在方法区中person 变量存放在 Java 栈的局部变量表中真正的 person 对象存放在 Java 堆中在 person 对象中,有个指针指向方法区中的 person 类型数据,

2020-12-20 14:08:45 231 1

原创 jvm-第八章:堆

1、堆的核心概述1.1、认识堆内存堆与进程堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM但是进程包含多个线程,他们是共享同一堆空间的对堆的认识一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私

2020-12-20 00:27:22 453 1

原创 jvm-第七章:本地方法栈

1、本地方法栈本地方法栈的特点Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。**允许被实现成固定或者是可动态扩展的内存大小(**在内存溢出方面和虚拟机栈相同)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个

2020-12-18 18:05:52 100 1

原创 jvm-第六章:本地方法接口

1、本地方法什么是本地方法?简单地讲,一个Native Method是一个Java调用非Java代码的接囗一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern 告知C++编译器去调用一个C的函数。“A native method is a Java method whose implementation is provided by non-java cod

2020-12-18 17:56:02 79 1

原创 jvm-第五章:虚拟机栈

1、虚拟机栈概述1.1、虚拟机栈的出现背景参考文档:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。内存中的栈与堆首先栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处

2020-12-18 17:07:23 255

原创 jvm-第四章:程序计数器

1.PC 寄存器概述参考文档地址https://docs.oracle.com/javase/specs/jvms/se8/html/index.htmlPC 寄存器介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不

2020-12-17 22:25:20 99

原创 jvm-第三章:运行时数据区及线程概述

1、前言本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品2、运行时数据区结构2.1、运行时数据区与内存内存内存是非常重要的

2020-12-17 18:53:32 103

原创 JDK8-第三章:Stream的使用

StreamAPl说明●Java8中有两大最为重要的改变。第-一个是Lambda表达式:另外一个则是Stream API。●Stream API ( java. util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为Stream API可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。●Stream 是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使

2020-12-16 20:52:23 163

原创 JDK8-第三章:java8新加常用函数

新加的函数都很好理解,直接看代码跑一跑就能知道怎么用了什么是函数式(Functional)接口●只包含一个抽象 方法的接口,称为函数式接口。●你可以通过Lambda表达式来创建该接口的对象。( 若Lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。●我们可以在- 一个接口上使用@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口。同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。●在java.

2020-12-16 20:37:55 195

原创 JDK8-第二章:方法引用表达式

什么是函数式(Functional)接口●只包含一个抽象 方法的接口,称为函数式接口。●你可以通过Lambda表达式来创建该接口的对象。( 若Lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。●我们可以在- 一个接口上使用@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口。同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。●在java.util.function包下定 义了Java 8的丰富

2020-12-16 20:29:51 115

原创 JDK8-第一章:Lambda表达式

java8算是一个很大的改变的版本 2014版本1. java8特点速度更快代码更少 lambda表达式api强大便于并行最多减少空指针nashom引擎 允许在JVM上允许JS2.Lambda表达式lambda表达式是jdk8的新特性,在很大程度上它优化代码编写,减少编码过程。看案例:import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util

2020-12-16 20:06:02 127

原创 第二十五章:责任链模式

1、OA 系统采购审批需求学校 OA 系统的采购审批项目: 需求是采购员采购教学器材如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000,由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,由校长审批 ( 30000<x)请设计程序完成采购审批项目2、传统方案解决 OA 系统审批类图传统方式是: 接

2020-12-09 12:25:54 103

原创 第二十四章:策略模式

1、编写鸭子项目编写鸭子项目,具体要求如下:有各种鸭子(比如野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如叫、飞行等)显示鸭子的信息2、传统方案解决鸭子问题传统方案解决方案类图代码实现Duck:鸭子的抽象父类public abstract class Duck { public Duck() { } public abstract void display();// 显示鸭子信息 public void quack() { System.out.println("鸭子嘎

2020-12-09 12:10:05 109

原创 第二十三章:状态设计模式

1、APP 抽奖活动问题请编写程序完成APP抽奖活动,具体要求如下:假如每参加一次这个活动要扣除用户50积分,中奖概率是10%奖品数量固定,抽完就不能抽奖活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完活动的四个状态转换关系图2、状态模式基本介绍状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类3、状态模式原理类

2020-12-09 11:51:31 103

原创 第二十二章:解释器模式

1、四则运算问题通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求先输入表达式的形式,比如 a+b+c-d+e,要求表达式的字母不能重复在分别输入 a, b, c, d, e 的值最后求出结果:如图2、传统方案解决四则运算问题分析编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果问题分析:如果加入新的运算符,比如 ‘*’、’/’ ( 等等,不利于扩展, 另外让一个方法来解析会造成程序结构混乱,不够清晰解决方案:可以考虑使用解释器模式, 即: 表达式 --&g

2020-12-09 11:40:57 237

原创 第二十一章:备忘录模式

1、游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力), 当大战Boss后攻击力和防御力下降, 然后从备忘录对象恢复到大战前的状态2、传统方案解决游戏角色恢复传统的方式的问题分析一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大传统的方式是简单地做备份, new 出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节解决方案: ==> 备忘录模式3、备忘录模式基本介绍备

2020-12-09 11:00:47 85

原创 第二十章:中介者模式

1、智能家庭项目智能家庭项目:智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为: 闹铃响起 --> 咖啡机开始做咖啡 --> 窗帘自动落下 --> 电视机开始播放2、传统方案解决智能家庭管理问题类图传统的方式的问题分析当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂各个电器对象彼此联系, 你中有我,我中有你,不利于松耦合各个电器对象之间所传递的消息(参数),容易混乱当系统增加一个新

2020-12-09 10:44:52 98

原创 第十九章:观察者模式

1、天气预报项目需求天气预报项目需求,具体要求如下:气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)需要设计开放型API,便于其他第三方也能接入气象站获取数据提供温度、气压和湿度的接口测量数据更新时,要能实时的通知给第三方2、传统方式解决天气预报需求WeatherData类通过对气象站项目的分析,我们可以初步设计出一个WeatherData类通过getXxx()方法,可以让第三方接入,并得到相关信息当数据有更新时,气象站通过调用dataCh

2020-12-09 10:21:07 118

原创 第十八章:迭代器模式

1、学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。 如图:2、传统方案解决学校院系展示需求传统的方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 : 在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作假如计算机学院的院系存储在数组中,信息工程学院的院系存储在集合中,我们要怎么才能定义一

2020-12-09 00:19:07 103

原创 第十七章:访问者模式

1、测评系统的需求完成测评系统需求将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价有不同的种类,比如成功、失败等)2、传统方式完成测评系统传统方式的问题分析如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护传统方式的扩展性不好,比如增加了新的人员类型,或者管理方法,都不好扩展引出我们会使用新的设计模式 –-> 访问者模式3、访问者模式基本介绍访问者模式(Visitor Pa

2020-12-08 23:05:21 163

原创 第十六章:命令设计模式

1、智能生活项目需求我们买了一套智能家电, 有照明灯、 风扇、 冰箱、 洗衣机, 我们只要在手机上安装 app 就可以控制对这些家电工作。这些智能家电来自不同的厂家, 我们不想针对每一种家电都安装一个 App, 分别控制, 我们希望只要一个 app 就可以控制全部智能家电。要实现一个 app 控制所有智能家电的需要, 则每个智能家电厂家都要提供一个统一的接口给 app 调用, 这时 就可以考虑使用命令模式。命令模式可将“动作的请求者”从“动作的执行者” 对象中解耦出来。在我们的例子中,动作的请求

2020-12-08 22:29:33 107

原创 第十五章:模板方法模式

1、豆浆制作问题编写制作豆浆的程序, 说明如下:制作豆浆的流程:选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料, 可以制作出不同口味的豆浆选材、 浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用模板方法模式完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案, 因此就直接使用,不再使用传统的方案来引出模板方法模式)2、模板方法模式基本介绍模板方法模式(Template Method Pattern) , 又叫模板模式(Templ

2020-12-08 21:41:38 174

空空如也

空空如也

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

TA关注的人

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