自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学习Java中的队列:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList

1、Vector背景:Vector是在 JDK 1.0 提供的,但是事实上已经很少有人使用了。主要原因是性能差,且不符合大部分开发时的需求。但是在 JDK 中,Vector一直没有被标记为Deprecated。实现:Vector是基于数组实现,几乎在所有操作方法上,都用synchronized关键字实现方法同步,这种同步方式可以对单一操作进行加锁,比如多个线程同时执行add会同步阻塞执行,但是多线程执行add和remove时,就不会阻塞了。缺点:大部分需要对队列加锁的场景,是想对整个队列加锁,而不仅仅

2021-07-06 19:32:22 451

原创 代理模式【Proxy Pattern】

小故事: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧;就比如古代每个男人的爱好–逛青楼;初来乍到的你肯定不知道哪个姑娘更加风情万种,所以这个时候你需要找到老鸨给你推荐(啧啧啧),老鸨其实就是这些姑娘们的代理人;那么用java程序怎么表示呢,接下来就见分晓代码演示:1、首先定义一种类型(既然都在青楼中,里面的姑娘肯定都是同一种类型,包括老鸨)package com.design.dp.proxy;// 定义姑娘们的类型以及她们能做的事情public interface K

2021-06-29 21:28:08 228

原创 mysql主从复制

1.mysql为什么需要主从复制?1、业务复杂的系统:场景>>有一条sql语句需要锁表,导致暂时不能使用读服务,此时就会影响运行中的业务;使用主从复制,主库负责写,从库负责读,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。2、做数据的热备3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能2.什么是mysql的主从复制MySQL 主从复制是指数据可以从一个MySQL数据库服务器的主节点复制

2021-06-26 22:40:15 289 1

原创 【学习记录】SpringMVC相关知识点

MVC框架mvc是一种设计模式。模型(model)-视图(view)-控制器(controller),三层架构的设计模式。用于实现前端页面的展现与后端业务数据处理的分离。优点:分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。有利于系统的并行开发,提升开发效率。什么是SpringMVCSpring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架优点:可以支持各种视图技术,而不仅仅局限于JSP;与Spring框架集成(如Io

2021-05-20 10:56:45 137

原创 【学习记录】集合信息整理

面试题:你说说collection里面有什么子类?其实面试的时候听到这个问题的时候,面试官是想考察List,Set的相关知识点List :可以允许重复的对象可以插入多个null元素是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适Set :不允许重复对象

2021-05-19 10:46:52 161

原创 【学习记录】MySql数据库相关知识

Mysql的ACID属性原子性(Actomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以操持完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦

2021-05-14 10:28:02 276 1

原创 单元测试-测试私有内部类(方法及属性)

测试私有内部类目标代码:public class TestDemo { public void methodA(){ } private static class TestClass{ private String testString; TestClass(){} public boolean testMethod(String str){ return t

2021-02-05 15:40:20 3237 1

原创 【设计模式】享元模式

享元模式(Flyweight Pattern)享元模式:主要用于减少创建对象的数量,以减少内存占用和提高性能;String常量池以及数据库连接池是享元模式的应用实例含义: 享元模式会尝试重用现有的同类对象,如果未找到匹配的对象,才会进行创建对象的操作。应用场景: 在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。优点: 大大减少对象的创建,降低系统的内存,使效率提高缺点: 提高了系统的复杂度,需要分离出外部状态和内部

2020-07-10 16:32:29 150

原创 【设计模式】装饰器模式

装饰器模式(Decorator Pattern)**解释:**可以向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装;含义: 创建一个装饰类,用于包装原有的类,在保持原有类完整性的前提下,提供了额外的功能;这样可以动态地给一个对象添加一些额外的职责,同时避免新添加代码与原有代码之间的耦合度过高;使用场景: 在不增加很多子类的情况下扩展类,添加一些需要特定实现的业务优点: 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模

2020-07-10 14:14:38 136

原创 【设计模式】抽象工厂模式

抽象工厂(Abstract Factory Pattern)抽象工厂模式:可以理解为是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。含义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类使用场景:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。优点:当一个产品族中的多个对象被设计

2020-06-23 16:18:28 161

原创 工厂模式【Factory Method Pattern】

工厂模式工厂模式:Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。含义:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。3、屏蔽产品的具体实现,调用者只关心产品的接口缺点:

2020-06-23 15:03:04 154

原创 策略模式【Strategy Pattern】

策略模式: 在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。目的:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换;优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。例如:诸葛亮的锦囊妙计,每一个锦囊就是一个策略;诸葛亮

2020-06-23 14:08:53 166

原创 单例模式【Singleton Pattern】

单例模式: 属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)单例构建方式1:饿汉式类加载到内存后,就实例化一个单例,JVM保证线程安全优点:简单实用(推荐使用)缺点:不管用到与否,类装载时就会完成实例化public class Singleton01{ private static final Singleton01 INSTANCE = new Singleton01();

2020-06-23 09:20:45 180

原创 在java代码中添加声音文件

在java中添加声音文件import java.io.IOException;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.SourceDataLine;public

2020-06-22 21:09:26 1053

原创 java实现http及https请求(get及post方式)

java实现http请求import org.apache.http.Consts;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.h

2020-06-18 15:22:37 1438

原创 算法-计算n的阶乘以及n的累加

编写算法,计算下面表达式的值:1 + (1+2 + 1 * 2)+ (1+2+3 + 1 * 2 * 3) +…+ (1+2+…+n + 1 * 2 *…*n);public class AutoTest { public static Integer sum; /** * 编写算法,计算下面表达式的值 * 1 + (1+2 + 1*2)+ (1+2+3 + 1*2*3) +...+ (1+2+...+n + 1*2*...*n) * 1 * 1

2020-06-16 18:10:28 1373 1

原创 java数组-常用的四种排序算法及常用的功能

import java.util.Arrays;public class ArrayArith { // 对数组进行排序 方法1 冒泡排序 public static void sortArr(int[] arr){ if(arr == null || arr.length < 2){ return; } // 0 ~ N-1 // 1~n-1 // 2 fo

2020-06-04 16:17:37 177

原创 java中位运算符详解

java中位运算符有“与( & )”、“或( | )”、“异或( ^ )”、“取反( ~ )”、“左移( << )”、“右移( >> )”、“无符号右移( >>> )”,主要是针对二进制来进行逻辑计算的与( & )使用规则:有 0 则 0示例: 3 & 4 = 00011 // 3 的二进制0100 // 4 的二进制-------------00004 & -1 = 40000 0100 // 4的二进制码1

2020-06-04 15:53:19 576

原创 日期操作工具类-DateUtils

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/** * 日期操作工具类. * * @author lazypeoplejiang */public class DateUtils { /** * 英文简写如:2020 */ public static String FOR

2020-06-03 15:56:56 235

原创 字符串常用工具类-StringUtils

import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.security.MessageDigest;import java.util.ArrayList;import java.util.Locale;import java.util.regex.Matcher;import java.util.regex.Pattern; /** * 字符串工具类,提供一些字符

2020-06-03 15:55:47 223

原创 java实现一定精度的开根号运算

需求:在不借助系统库的情况下,编写一个函数,实现开根号的操作,并且保证一定的精度代码采用了牛顿迭代法以及二分查找法两种方式并分别打印了他们的循环次数以比较优劣:/** * 实现一个函数,完成对v开根号的操作,误差小于t,不能调用函数库 */public class Sqrt{ /** * 可以使用牛顿迭代法 * 首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代个六七次后x的值就已经相当精确了 */ public static doub

2020-06-03 15:47:58 1585 3

原创 手撕时间复杂度为O(1)的LRU算法

LRU算法LRU(Least Recently Used),即最近最少使用算法。常用于实现一个简单的缓存功能,就是把很久未使用的直接移除掉,只保留最近使用的。LRU主要需要实现两个功能添加缓存(涉及到删除缓存)获取缓存实现原理一个单链表就能实现简单的LRU算法:但是链表的查找时间复杂度比较高了,是O(n)。一个散列表+双链表实现一个O(1)复杂度的LRU算法:用散列表就可以直接定位某个缓存,时间复杂度O(1),但是散列表插入缓存之后,就没有了顺序,所以才需要一个链表来维护这个缓存的顺序,超过缓

2020-05-31 12:45:58 918 1

原创 详细了解try...catch...return

情况1try中有return,finally中没有return:public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static int test(){ int num = 10; try{ System.out.println("try"); return num += 80; }catch(Exception e){

2020-05-26 10:41:20 134

原创 详解源码中Spring如何解决循环依赖

案例:循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B又依赖于A。如下图:“依赖”在Spring中有两种情况:1.构造器循环依赖2.field属性注入循环依赖构造器循环依赖@Servicepublic class A { public A(B b) { }}@Servicepublic class B { public B(A a) { }}此时启动项目会报错field属性注入循环依

2020-05-25 08:44:49 351

原创 详解二分查找(常规及旋转)

二分查找算法框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = (right + left) / 2; if (nums[mid] == target) { ... } else if (nums[mid] < target) { left = ...

2020-05-21 09:47:30 240

原创 dubbo简介以及入门demo

dubbo的概念dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且其本质就是服务调用(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)核心功能:1. 远程通讯: 提供对多种基于长连接的NIO(一种同步非阻塞的 I/O 模型)框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换

2020-05-20 16:01:07 230

原创 java基础知识点(1)

1:JRE与JDKJDK:JRE+开发工具(编译工具+运行工具)JRE:JVM+各种核心类库JVM:保证各种语言的跨平台性

2020-05-20 10:40:23 387

原创 【记录】获取访问者的真实IP

发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限定的时候,需要首先获取该真实的IP。一般分为两种情况:方式一、客户端未经过代理,直接访问服务器端(nginx,squid,haproxy);方式二、客户端通过多级代理,最终到达服务器端(nginx,squid,haproxy);客户端请求信息都包含在HttpServletRequest中...

2020-05-14 15:53:02 491

原创 【记录】什么是CAS机制?

CAS(compareAndSwap):比较并替换在具体了解cas机制之前,我们先来看两个案例:(1)示例:启动两个线程,每个线程中让静态变量count循环累加100次。那么最终count结果是多少?一定是200吗?public static int count = 0;public static void main(String[] args){ // 开启两个线程 for(int i = 0;i < 2;i++){ new Thread( new Runable(){

2020-05-14 15:44:02 237

原创 【记录】了解Nginx三大功能

什么是nginx?【摘自百度百科】 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。nginx功能介绍1:反向代理正向代理:此种情况下,用户直接访问服务器,需要自己在客户端设置服务器的ip以及端口反向代理:nginx可以用作一个代理服务器,用于接收客户端的连

2020-05-14 14:19:07 350

原创 【记录】什么是zookeeper?

Zookeeper:一种分布式协调服务;所谓的分布式协调服务,即可以在分布式系统中共享配置,协调锁资源,提供命名服务等等。ZooKeeper是一个经典的分布式数据一致性的解决方案,致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问控制能力的分布式协调服务。分布式应用程序可以基于ZooKeeper实现数据发布与订阅、负载均衡、命名服务、分布式协调与通知、集群管理、Leader选举、分布式锁、分布式队列等功能。Zookeeper的数据模型ZooKeeper内部拥有一个树状的内存模型,类似于文件

2020-05-13 11:10:54 238

原创 【记录】事务的特性以及隔离级别

1:事务的四种特性原子性:事务已经是操作中的最小单元,在事务开始后的操作,要么逻辑全部完成,要么逻辑全部不做,不会停留在中间环节。如果操作中出现异常,则会回滚到事务开始之前的状态。一致性:即指事务的执行前后数据的完整性是保持一致的。只是从一种一致性的状态变化为了另外一种一致性的状态。比如A向B转了100元钱,A的账户会少100元,B的账户会多100元,但是被操作二者账户的总额是不变的。隔离性:通常来说,一个事务的操作对于其他事务都是不可见的;也就是事务之间都是独立的,彼此之间没有干扰(也不是绝对,其实

2020-05-11 15:45:50 182

原创 log4j增加输出访问者ip、session等相关信息

背景介绍在当前服务器中日志输出并没有访问者ip等相关信息,所以增加需求,需要在日志中打印访问者的ip实现步骤1:首先下载log4j.jar包并将其导入到项目中2:建立一个log4j.xml或者是log4j.properties文件。(我此处选择的是log4j.xml文件)<?xml version="1.0" encoding="UTF-8"?> <!DO...

2019-12-24 17:40:28 2016

原创 java.lang.IncompatibleClassChangeError:异常原因及解决方法

错误场景1我在项目中遇到此报错的实例。这个错误官方解释是:在某些类定义发生不兼容的类更改时发生,当前执行方法所依赖的某个类的定义已更改。public class B extends A{}public class A{ // 这是更改前的代码 public transient final Logger log = LoggerFactory.getLogger(getClass);...

2019-12-24 16:27:23 28332

原创 【正则表达式】替换文件字符串中的换行符、回车符以及空格

需求分析项目中有可能一些数据是外系统直接通过报文来进行请求,此时报文中的数据我们不清楚格式,假如报文中数据存在换行符或者回车符等,存储到数据库之后再次读取使用有可能导致服务崩坏。所以我们需要对数据格式进行校验替换代码实现public static String replaceWithString(String str){ // 建立正则表达式 Pattern pattern = Patt...

2019-12-02 10:37:43 5664

原创 【文件下载】java使用浏览器从后台服务器下载文件

需求分析说明前一段时间项目中有一个需求:前端页面下载一个合同文本是直接拿着文件地址去服务器上进行下载,这种直接把文件服务器暴露给用户下载的方式是不安全的;于是需要进行改造,前端页面访问后台方法,后台查询出文件地址然后进行下载,将输出流返给前端。代码说明首先你要知道你自己下载文件的路径,这个自己可以根据项目需求另写方法查询出来地址,然后当参数传递过来。public void download...

2019-12-02 10:21:43 562

原创 【java设计模式】工厂模式之老张开车

话题之老张去东北某一年某一天,老张想开汽车去东北赏雪,首先老张需要有一个汽车,于是他花钱买了一辆;public class Car{ public void run(){ System.out.println("老张开着汽车去东北"); }}测试类:public class test{ public static void main(String[] args) { ...

2019-11-21 13:57:49 1421

空空如也

空空如也

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

TA关注的人

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