- 博客(1294)
- 收藏
- 关注
原创 Java描述设计模式
一、生活场景1、文件系统下图是常见的计算机文件系统的一部分。文件系统是一个树结构,树上长有节点。树的节点有两种:树枝节点即文件夹,有内部树结构,在图中涂有颜色;树叶节点另一种是文件,即树叶节点,没有内部树结构。2、打印文件树结构publicclass C01_InScene { public static void main(String[] args) { File file =newFile("F:\\tree") ; file...
2020-05-25 09:31:18
159
原创 redis持久化
## # Redis持久化介绍所有的数据都存在内存中,从内存当中同步到硬盘上,这个过程叫做持久化过程。持久化操作,两种方式:rdb方式、aof方式,可以单独使用或者结合使用。rdb持久化方法:在指定的时间间隔写入硬盘aof方式:将以日志,记录每一个操作,服务器启动后就构建数据库。RDB方式 Redis是默认支持的优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件)## #Redis的持久化之RDB方式劣势:如果宕机,数据损失比较大,因为它是每一个时...
2020-05-25 09:25:27
105
原创 Java练习——扑克牌发牌器
实现思路- 构建一张扑克牌 - 构建一套扑克牌 - 测试构建一张扑克牌[url=][/url]/***@author冬冬* 定义一个单张扑克牌类* 有花型,大小*/publicclassCard {privateString flower;//花型privateintdaxiao;//点数/**构造方法*@paramflower*@paramdaxiao*/publicCard(String flower,intdaxiao) {this.flower = f...
2020-05-25 09:16:24
309
原创 JDBC 数据库连接池
数据库连接池原理-传统方式当有多个线程,每个线程都需要连接数据库执行SQL语句的话,那么每个线程都会创建一个连接,并且在使用完毕后,关闭连接。创建连接和关闭连接的过程也是比较消耗时间的,当多线程并发的时候,系统就会变得很卡顿。同时,一个数据库同时支持的连接总数也是有限的,如果多线程并发量很大,那么数据库连接的总数就会被消耗光,后续线程发起的数据库连接就会失败。数据库连接池原理-使用池与传统方式不同,连接池在使用之前,就会创建好一定数量的连接。如果有任何线程需要使用连接,那么就从.
2020-05-25 09:12:32
182
原创 类加载机制
1.JVM的类加载机制主要有如下3种。全盘负责:所谓全盘负责,就是当一个类加载器负责加载某个Class时,该Class所依赖和引用其他Class也将由该类加载器负责载入,除非显示使用另外一个类加载器来载入。双亲委派:所谓的双亲委派,则是先让父类加载器试图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父加载器,依次递归,如果父加载器可以完成类加载任务,就成功返回;只有父加载器无法完成此加载任务时,才
2020-05-25 09:07:55
161
原创 Java动态代理
1 什么是动态代理 在程序运行时,对原有对象的功能进行增强2 动态代理的应用场景 解决POST请求乱码问题 敏感词汇的过滤3 开发步骤 1. 代理对象和真实对象实现相同的接口 2. 代理对象 = Proxy.newProxyInstance(); 3. 使用代理对象调用方法。 4. 增强方法4 使用动态代理 public interfaceIStar { public voidsing(intmoney);} public classTomimplemen...
2020-05-22 10:19:47
127
原创 MySQL忘记密码不要慌,几步轻松解决
1.win+R键调出运行窗口,输入services.msc2.找到MySQL服务,停止服务3.打开CMD输入命令:mysqld --skip-grant-tables(开启一个mysql服务,不需要进行认证)【不要关闭这个窗口】4.再打开一个CMD窗口,输入:mysql -u root -p (不需要输入密码.就可以进入)5.依次输入命令:show databases;-- 查看所有数据库use mysql; -- 跳转到mysql数据库update user set password=p...
2020-05-22 10:11:57
211
原创 TOMCAT之java技术详解
一、JAVA的形成历史早期在20世纪90年代,SUN公司为了抢占智能电视的市场,在1991年成立了一个Green的研发小组,专攻计算机在家电产品上的嵌入应用;但是由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题,所以后来开发了一种称为Oak的面向对象语言。1995年,更名为java,据说是在Java岛(爪哇岛)上曾喝过一种美味的咖啡,于是便命名为java;开始向互联网进发,开启了java的辉煌之旅。二、java的主要技术java程序设计语言java APIj
2020-05-22 10:08:06
377
原创 java并发编程的艺术
文章目录1. JAVA并发机制的底层实现原理1. 锁的状态2. 原子操作的实现原理2. java内存模型1. 基础2. 重排序4. JAVA并发编程基础1. Synchronized底层指令2. Thread.join5. JAVA中的锁1. AbstractQueuedSynchronized(AQS, 同步器)2. LockSupport3. Condition6. JAVA并发容器和框架1. ConcurrentHashMap2. ConcurrentLinkedQue
2020-05-22 10:02:38
195
原创 Java相对路径读取文件
1、在Java开发工具的project中使用相对路径在project中,相对路径的根目录是project的根文件夹,在此就是repathtest文件夹了。创建文件的写法是:[Java]纯文本查看复制代码? 1 File f = new File("src/com/lavasoft/res/a.txt"); [Java]纯文本查看复制代码? 1 File f =...
2020-05-22 09:58:45
188
原创 java并发编程的艺术
文章目录1. JAVA并发机制的底层实现原理1. 锁的状态2. 原子操作的实现原理2. java内存模型1. 基础2. 重排序4. JAVA并发编程基础1. Synchronized底层指令2. Thread.join5. JAVA中的锁1. AbstractQueuedSynchronized(AQS, 同步器)2. LockSupport3. Condition6. JAVA并发容器和框架1. ConcurrentHashMap2. ConcurrentLinkedQue
2020-05-22 09:49:05
120
原创 Java相对路径读取文件
1、在Java开发工具的project中使用相对路径在project中,相对路径的根目录是project的根文件夹,在此就是repathtest文件夹了。创建文件的写法是:[Java]纯文本查看复制代码? 1 File f = new File("src/com/lavasoft/res/a.txt"); [Java]纯文本查看复制代码? 1 File f =...
2020-05-22 09:45:14
291
原创 Spring Boot 如何防止重复提交?
在传统的web项目中,防止重复提交,通常做法是:后端生成一个唯一的提交令牌(uuid),并存储在服务端。页面提交请求携带这个提交令牌,后端验证并在第一次验证后删除该令牌,保证提交请求的唯一性。上述的思路其实没有问题的,但是需要前后端都稍加改动,如果在业务开发完在加这个的话,改动量未免有些大了,本节的实现方案无需前端配合,纯后端处理。思路1、自定义注解 @NoRepeatSubmit 标记所有Controller中的提交请求2、通过AOP 对所有标记了 @NoRepeatSubmit 的方法拦
2020-05-22 09:40:05
612
原创 写代码时应当牢记的事情
在如今这个时代,每个人都在努力提升资源能力。在Web应用程序方面,我们有Spring、Play和Struts等框架,这些框架可以帮助我们构建具有可扩展性和可管理性的软件。这些框架提供了许多样板代码,所以你无需在应用程序中再写这些代码。不过,写代码并不难,但是写高质量的代码却很难。作为开发人员,在日常工作中我们也应该遵循相同的基本原则。我们应该将工作完成得尽善尽美,不能将任何错误留给客户。很多时候,迫于压力开发人员会编写管理不善或复杂的代码。为了编写高质量的代码,有一条经验法则是...
2020-05-22 09:35:51
206
原创 JavaBean类中的基本类型属性
众所周知,我们在使用Hibernate、Mybatis等框架一系列的ORM框架的时候,我们都需要定义JavaBean类,用来和数据库的字段一一对应。但是当我们定义数值或者小数等能用基本类型表示的数据的时候,我们往往会将其定义为基本类型的包装类。例如下图很多程序员,都知道这样去做,但是并不知道具体的原因。下面我从业务和技术层面去分析原因。首先从业务层面来看: 以基本类型的int来举例。 Integer比较明显的一个好处就是 Integer比int可以多表示一个null, 你...
2020-05-21 09:53:45
526
原创 sql语句总结
一、基础部分1、创建数据库,删除数据库[SQL]纯文本查看复制代码? 1 2 CREATE DATABASE database-name drop database dbname 2、备份sql server[SQL]纯文本查看复制代码? 1 2 3 4 5 --- 创建 备份数据的 device U...
2020-05-21 09:48:25
179
原创 基于SpringBoot2.0 实现的jvm远程监工图形化工具
项目介绍基于SpringBoot2.0 实现的jvm远程监工图形化工具,可以同时监控多个web应用 该项目是借鉴另个一开源项目 ( JavaMonitor)https://gitee.com/zyzpp/JavaMonitor演变而来,剔除了一些功能,增加了可远程监控模块,只需要在需要监控的项目集成监控的jar包 并设置可访问的IP(默认为空 则不拦截IP访问) 就可以实现远程监控,和用户管理模块,动态定时任务项目框架SpringBoot 2.0.3.RELEASE mybatis-plu..
2020-05-21 09:43:21
225
原创 上海部分公司面经二(连载)
为各位收录上海部分公司面经,连载持续更新。本期收录网易、平安壹钱包、陆金所面经。网易面经:1,B树索引效率快,原理,直接让我画图,跟hash索引的原理对比。hash算法跟一致性hash区别?2,问我k8snodeport网络怎么流转出去,包怎么转出来的3,redis内存模型??4,浏览器内部拒绝跨域访问的原理是啥5,servelet内部实现原理6,dubbo可靠通信原理,tcp跟udp通信的原理和不同7,k8s负载均衡算法怎么做的8,keepalive的vip怎...
2020-05-21 09:40:22
370
原创 Linux常用命令大全
Linux常用命令大全Linux常用命令大全(非常全!!!)系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作cat /proc/cpuinfo 显示CPU info的信息cat /proc/interrup...
2020-05-21 09:37:37
386
原创 MYSQL性能优化的最佳20+条经验
1、为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:上面两条SQL语句的差别就是CURDATE(),MySQL的查询缓存对这个函数不起作用。所以,像NOW()和RAND()或是
2020-05-21 09:32:23
196
原创 线程死锁分析
什么是线程死锁?死锁是指两个或者两个以上的线程在执行过程中,因为争夺资源而造成的互相等待的现象。如果没有外力作用下,这些线程会一直互相等待而无法继续运行下去。比如说线程A持有资源1,等待资源2线程B持有资源2,等待资源1且双方都不愿意放弃自己所持有的资源死锁的四个条件:1.互斥条件:资源只能同时被一个线程占用,如果此时有其他线程想要获取资源,则必须等待,直到占有资源的线程释放该资源2.请求并持有条件:指一个线程已经持有了至少一个资源,但是又提出了新的资源请求,而新资源已被其他线程占用,所以当
2020-05-21 09:24:51
150
原创 Spring Boot整合Rabbit MQ
先引入依赖:[XML]纯文本查看复制代码? 1 2 3 4 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ...
2020-05-21 09:21:26
167
原创 面试必备乐观锁和悲观锁1
何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁( 共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前
2020-05-21 09:05:26
169
原创 常见的设计模式和解释
1. 请列举出在 JDK中几个常用的设计模式?单例模式(Singletonpattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如Boolean,像 Boolean.valueOf,观察者模式(Observer pattern)被用于Swing和很多的事件监听中。装饰器设计模式(Decoratordesign pattern)被用于多个 Java IO 类中。2. 什么是设计模式?你是否在你的代码里面使...
2020-05-20 10:14:31
172
原创 分布式锁详解
并发编程的锁机制:synchronized和lock。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余后续线程发现已经有标记了则等待拥有标记的线程结束同步代码块取消标记后再去尝试设置标记。 分布式环境下,数据一致性问题一直是一个比...
2020-05-20 10:11:23
222
原创 单点登录实现
简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘宝与天猫、新浪微博与新浪博客等都用到了这个技术。 原理 单点登录 有一个独立的认证中心,只有认证中心才能接受用户的用户名和密码等信息进行认证,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,当用户提供的用...
2020-05-20 10:03:47
219
原创 maven概念介绍
Maven概念Maven 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs.Maven的生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean,default和site。 Clean Lifecycle在进行真正的构建之前进行一些清理工作。 Default L...
2020-05-20 10:01:05
136
原创 架构演变历程&dubbo基本概念
Dubbo一、基础知识1、分布式基础理论1.1)、什么是分布式系统?《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统(distributed system)是建立在网络之上的软件系统。随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需**一个治理系统**确保架构有条不紊的演进。*单一应用架构*当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署
2020-05-20 09:56:14
114
原创 架构演变历程&dubbo基本概念
Dubbo一、基础知识1、分布式基础理论1.1)、什么是分布式系统?《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统(distributed system)是建立在网络之上的软件系统。随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需**一个治理系统**确保架构有条不紊的演进。*单一应用架构*当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署
2020-05-20 09:34:41
177
原创 使用jstl+el将list集合数据展示到jsp页面的表格table
* 需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中<%@ page import="cn.itcast.domain.User" %><%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.Date" %><
2020-05-20 09:27:39
2774
1
原创 session域对象
Session有效范围当前会话,从浏览器打开到浏览器关闭这个过程。HttpSession和Cookie的区别a)HttpSession数据存在服务器,Cookie数据存在浏览器上b)Cookie存放数据是有大小限制的,HttpSession没有 cookie得大小是最大4k,Cookie的个数每个浏览器不同c)Cookie不安全,HttpSession安全HttpSession何时创建和销毁?作用范围: 创建:服务器端第一次调用getSession()创建Htt...
2020-05-20 09:22:59
218
原创 java枚举的使用
enum 的全称为 enumeration, 是 JDK 1.5中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1.原始的接口定义常量 2.语法(定义) 3.遍历、switch 等常用操作 4.enum 对象的常用方法介绍 5.给 enum 自定义属性和方法 6.En...
2020-05-20 09:16:49
140
原创 在Java程序中使用jXLS导出Excel格式文档
jXLS是什么东东?官方介绍:jXLS is a small and easy-to-use Java library for writing Excel files using XLS templates and reading data from Excel into Java objects using XML configuration. 哎呀这是什么呀,来点能看的懂的吧,这个大体的意思就是:jXLS是一个基于XML配置的小型,易于使用java类库,可以用来写Excel格式文档,也可以用...
2020-05-19 10:06:00
823
原创 23种设计模式-备忘录模式(19)
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。介绍意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。如何解
2020-05-19 10:00:44
115
1
原创 redis使用
一 redis简介 redis是一款高性能的键值对(key-value)非关系型数据库。key是字符串类型,value包含五种类型:string hash list set sortedset二 redis安装 redis是C语言开发,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境 1 安装gcc-c++ yum install gcc-c++ 2 安装redis #下载redis ...
2020-05-19 09:55:52
142
原创 Nginx使用
一 Nginx简介 Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔·西索夫(Igor Sysoev)所开发,官方测试 nginx 能够支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。二 Nginx安装 1. 需要安装 gcc 的环境 yum install gcc-c++ 2. 第三方的开发包 1. y...
2020-05-19 09:49:07
207
原创 Java基础之反射
反射概述问题:我们平时书写在idea中的Java程序是如何运行的呢?1)首先将 .java 源文件编译为class类文件;2)编译后的类文件是存在硬盘中的,那么我们运行需要在内存中看到效果,那么类文件是如何被加载到内存中的呢,就是jvm通过类加载器ClassLoader把硬盘中的class文件加载到内存中,这样就可以使用这个类中的成员变量和方法了。而被加载到内存中这个class文件就会变成一个Class类的对象。反射要依赖于Class类。由于Class表示类文件的字节码文件对象,类.
2020-05-19 09:45:46
176
原创 Java基础之类加载器
Java基础之类加载器概述类加载器:负责将.class文件加载到内存中,并为之生成对应的Class对象,也就是字节码文件对象。问题:我们平时书写在eclipse中的Java程序是如何运行的呢?1)首先将 .java 源文件编译为class类文件;2)编译后的类文件是存在硬盘中的,那么我们运行需要在内存中看到效果,那么类文件是如何被加载到内存中的呢,就是jvm通过类加载器ClassLoader把硬盘中的class文件加载到内存中,这样就可以使用这个类中的成员变量和方法了。而被加载.
2020-05-19 09:39:57
185
原创 RPC框架简介
什么是RPCRPC:Remote Produre Call-远程过程调用,像调用本地方法一样调用远程方法RPC原理RPC采用客户端(服务调用方)/服务端(服务提供方)模式,各自独自运行。客户端需要通过引用需要使用的接口,接口的实现和运行都是在服务端。RPC主要的依赖的技术包括序列化、反序列化和数据传输协议一些基础概念RMI(Remote Method Invoke,远程方法调用)代理模式通过代理对象将方法传递给实际对象; stub(桩)驻留客户端,承担远程对象实现者的角色; ske
2020-05-19 09:37:00
239
原创 【原创】Java动态代理
Java的三种代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.1.静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类.2.动态代理1.代理对象,不需要实现接口2.代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型)代理类所在包:java.lang...
2020-05-19 09:32:00
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅