- 博客(184)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 Java编写简单的自定义异常类
try catch是这之间所包含的代码如果出现异常时捕获他,并进行处理的,如果代码之间有错误,不会影响程序继续执行下去,程序会继续往后执行。表明方法可能会引发异常,在方法内部并不处理这个异常,想要得到异常的话,调用者使用try catch语句即可得到。明确抛出引发的异常,比如throw new Exception();二:写一个测试分数的方法类:这里面是抛出一个自己写的异常类。三:写一个测试分数,如果有异常,要捕获,不要抛出了。不管有没有异常程序段中都会被执行的代码。
2017-12-29 19:19:07 54054 8
原创 Java报错ClassNotFoundException或者NoSuchMethodError
出现这种报错99%为包版本不同,依赖冲突导致。
2022-12-04 10:14:42 454 1
原创 Maven pom.xml 标签大全详解
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
2022-11-30 23:07:46 603
原创 全网最全RocketMQ 用法及原理总结
前言: MQ简介、特点、使用场景 RocketMQ简介及主流消息队列选型技术比较 RocketMQ简介:RocketMQ是阿里出品,Java语言编写的,历经多次双十一大促考验,它的性能、稳定性和可靠性都是值得信赖,每秒钟大概能处理几十万条消息,采用发布订阅模式。源代码相对也比较容易读懂,也容易对 RocketMQ 进行扩展或者二次开发。RocketMQ 对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应。比如交易系统和金融系统,很在意响应时延,那应该选择使用 R..
2022-02-21 10:45:15 856 3
原创 Java面试——基本数据类型int 和其包装类型 Integer的区别
Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下:原始类型:boolean,char,byte,short,int,long,float,double包装类型:Boolean,Character,Byte,Short,Integer,Lon
2021-12-07 10:38:05 238 1
原创 微服务架构——SpringCloudAlibaba——Seata
文章目录前言:Seata 解决的问题前言:Seata 的使用前言:Seata 解决的问题前言:Seata 的使用
2021-10-08 17:25:06 185 3
原创 MySQL——索引及其原理
一、如果没有索引那么查找一个元素需要去磁盘中逐个寻找,每一次寻找都涉及到一次i/o操作,效率极其低下。二、选择哪种数据结构作为索引二叉树:由于数据库中数据的特殊性,主键一般都是自增序列,这样形成的二叉树都是及其不平衡的,依然需要多次i/o红黑树:红黑树虽然是平衡的,但是每个节点只有两个叶子节点,这样存储的数据量上去后,仍然需要进行多次i/ob树 :b树可以有多个节点,每个节点存储数据,基本满足要求,但是不够完美。b+树:在b树的基础上,只在叶子节点存储数据,保证根节点可以存储更多的索引,最大程度
2021-10-08 17:22:38 77 1
原创 用TypeHandler实现字符串和集合的转换、敏感数据脱敏
一、集合和字符互转的typehandlerpackage com.peanut.youfupay.typehandler;import lombok.extern.slf4j.Slf4j;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import org.springframework.util.StringUtils;import java.sql.CallableS
2021-09-09 15:39:40 641 1
原创 Java-输入-输出流
1、输入输出流的介绍参考文章:https://www.cnblogs.com/progor/p/9357676.html2、流的 flush 和 close 方法参考文章:https://blog.csdn.net/lsx991947534/article/details/450657733、补充flush的触发还有一个机制,缓冲区满了,即水管中的水满了,会自动刷新缓冲区。缓冲区不满,则需要手动刷新...
2021-04-09 10:22:46 83 1
原创 定时任务和消息队列的区别和应用场景
异步处理⽐如用户注册、下单事件应⽤解耦不管定时任务作业还是MQ都可以作为两个应⽤之间的⻮轮实现应⽤解耦,这个⻮轮可以中转数据。流量削峰双⼗⼀的时候,任务作业和MQ都可以⽤来扛流量,后端系统根据服务能⼒定时处理订单或者从MQ抓取订单抓取到⼀个订单到来事件的话触发处理,对于前端⽤户来说看到的结果是已经下单成功了,下单是不受任何影响的。总结定时任务是时间驱动,⽽MQ是事件驱动。时间驱动是不可代替的,⽐如⾦融系统每⽇的利息结算,不是说消息来⼀条就算⼀下,⽽往往是通过定时任务批量计算。定时任务作业
2021-03-22 18:47:34 1627
原创 分布式锁-Redis实现
一、分布式锁的特性互斥性:在任意时刻,只有一个客户端能持有锁。不能死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。加锁和解锁必须是同一个客户端。容错性。(需依赖Redis多节点)二、分布式锁的实现1、maven依赖<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> &l
2020-12-01 23:51:32 224 1
原创 GIT的简单使用
一、给远程仓库配置SSH不建议使用github,网络太慢,现在github有的功能码云都有。使用SSH克隆代码,不要再使用http了,这样可以避免每次push代码的时候都要输密码。链接:SSH是什么?如何获取SSH?二、克隆远程仓库到本地使用命令:git clone 远程仓库项目的SSH地址使用sourceTree(4.0.2):三、GIT是如何进行版本管理的?Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。工作区:就是你在电脑里存储克隆出的代码的文件。版本
2020-11-21 22:33:35 210 3
原创 终于学会使用公钥、私钥了
先理解 公/私 钥的意思:私钥,即 私人 的钥匙,是唯一的,所以可以用来证明来源是特定的人公钥,即 公用 的钥匙,我可以将它给很多人(公众)。所以既然那么多人都知道,所以公钥并不能证明来源一定是特定的人在理解 加密、签名 的作用: 加密:用于防止信息外泄(泄露给不相关的人) 签名:用于确认身份(可以类比下信用卡上的签名)----> 到底谁 创建、拥有、使用 公/私 钥(这里很多人会混淆,而且网上很少有人说明,但很重要)? <----以 签名/验签 为例: 1. A 想 使用
2020-10-22 10:23:49 900 1
原创 Redis——常见问题及解决方案
Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。使用过Redis分布式锁么,它是什么回事?先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?setnx和expire合成一条指令来用Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?使用keys.
2020-09-23 13:53:49 336 1
原创 Redis——什么是Redis
定义:是一个基于内存、可持久化、Key-Value 类型、支持分布式的非关系型(NoSQL)数据库。基于内存:传统数据库一般将数据存储在硬盘而redis将数据存储在内存、读写速度非常快,常用来做缓存可持久化:Redis支持RDB和AOF两种持久化方式,将内存中的数据同步到硬盘防止数据丢失Key-Value 类型:Redis建议使用有规则的字符串作为key值,value常用的有五种数据类型string(支持二进制)、list、set、sortedSet、hash支持分布式:Redis 会根据has
2020-09-23 11:31:57 113
原创 Java面试——Spring——Spring MVC 运行流程
一、MVC : Model View Controller二、执行流程官方流程:1:发送请求到DispatchServlet(中央控制器)2:DispatcherServlet(中央控制器)调用HandlerMapping(处理器映射器)根据请求url找到需要执行的Handler(处理器)3:DispatcherServlet(中央控制器)通过HandlerAdapter(处理器适配器)调用处理器核心控制器捕获请求uri4:执行处理器,返回ModelAndView给中央控制器5:中央控制器
2020-09-16 15:36:02 207 1
原创 Java面试——Spring——Spring 有哪些主要模块?
Spring框架的七大模块1.Spring Core:Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。2.Spring Context:构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些像JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑
2020-09-16 14:28:43 430 1
原创 Java面试——Spring——为什么要使用Spring
Spring提供了丰富的企业级功能,降低了开发的复杂性。Spring让人们避免重复的造轮子Spring对很多异构的技术提供了统一的编程模型轻量:非入侵性的、所依赖的东西少、资源占用少、部署简单,不同功能选择不同的 jar 组合容器:工厂模式实现对 JavaBean 进行管理松耦合:通过注解即可完成 bean 的依赖注入AOP:通过 注解即可加入面向切面编程的能力,完成切面功能,如:日志,事务…的统一处理,更好的复用代码方便集成:通过配置和简单的对象注入即可集成其他框架,如 Mybatis、H
2020-09-15 16:57:08 176
原创 Java面试——设计模式——说一说你熟悉的设计模式?
常见的我们熟悉的设计模式有单例模式、工厂模式等,Spring框架中有这两种设计模式的经典使用。一、Spring框架中的单例模式:Spring框架中默认将bean设置为单例的,可以极大地提高系统的性能1、单例bean与原型bean的区别单例bean:在处理多次请求的时候在Spring 容器里只实例化出一个bean,后续的请求都公用这个对象,这个对象会保存在一个map(缓存)里面。当有请求来的时候会先从缓存(map)里查看有没有,有的话直接使用这个对象,没有的话才实例化一个新的对象。原型bean:
2020-09-15 16:02:53 2624 1
原创 Java面试——基础——网络——OSI与TCP/IP
一、OSI七层模型OSI过于繁琐和复杂,OSI是一种理论下的模型二、TCP/IP四层模型TCP/IP四层模型已经被广泛应用,称为网络互联实施上的标准。三、数据传输过程1、DATA数据由用户发给应用层2、应用层加应用头标记(AH)发送给下一层:传输层3、传输层加传输头标记(TH)发送给下一层:网络层4、网络层加网络层标记(IH)发送给下一层:数据链路层5、数据链路层加帧头(FH)和帧尾(FT)标记发送给下一层:物理层6、物理层数据以bit流的形式传递到下个应用的物理层7、下个应用会将
2020-09-09 17:53:31 179
原创 Java面试——基础——web——如何避免 sql 注入?
一、SQL注入产生的原因SQL注入产生的原因,和栈溢出、XSS等很多其他的攻击方法类似,就是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期之外的动作。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程中,超越了数据本身,成为了SQL语句查询逻辑的一部分,然后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期之外的动作。所以从根本上防止上述类型攻击的手段,还是避免数据变成代码被执行,时刻分清代码和数据的界
2020-09-08 17:17:13 250
原创 Java面试——基础——web——session的工作原理
一、创建Session当用户访问一个服务器,如果服务器启用Session,服务器就要为该用户创建一个SESSION。 在创建这个SESSION的时候,服务器首先检查这个用户发来的请求里是否包含了一个SESSION ID,如果包含了一个SESSION ID则说明之前该用户已经登陆过并为此用户创建过SESSION,那服务器就按照这个SESSION ID把这个SESSION在服务器的内存中查找出来。 如果客户端请求里不包含有SESSION ID,则为该客户端创建一个SESSION并生成一个与此SESS.
2020-09-08 16:47:25 167
原创 Java面试——基础——容器——如何创建一个集合不能被修改的集合?
一、Collections. unmodifiableCollection(Collection c) 方法创建的集合。 List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); Collection<Integer> readOnlyList = Collections.unmodifiableCollection(list);
2020-09-08 14:57:33 442
原创 Java面试——基础——IO——BIO、NIO、AIO 有什么区别?
在此之前,先弄清几个概念:1.同步:使用同步IO时,Java自己处理IO读写。2.异步:使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,完成后OS通知Java处理(回调)。3.阻塞:使用阻塞IO时,Java调用会一直阻塞到读写完成才返回。4.非阻塞:使用非阻塞IO时,如果不能立马读写,Java调用会马上返回,当IO事件分发器通知可读写时在进行读写,不断循环直到读写完成。一、BIO:同步并阻塞,服务器的实现模式是一个连接一个线程,这样的模式很明显的一个缺陷
2020-09-08 13:20:55 365
原创 Java面试——基础——io——Java 中 IO 流分为几种?
一、Java 中 IO 流分为几种Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个),Java中其他多种多样变化的流均是由它们派生出来的.字节流:InputStream,OutputStream。字符流: Reader,Writer。二、字符流和字节流的区别字符流和字节流是根据处理数据的类型的不同来区分的。字节流按照8位传输,字节流是最基本的,所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文
2020-09-08 11:00:04 1387
原创 Java面试——基础——字符串——String str=“i“与 String str=new String(“i“)一样吗?
关于此篇问题的讨论众说纷纭,我也是在准备面试题,没时间去分析编译源码验证,大家有不同意见欢迎留言讨论。一、直接赋值:String str=“abc”;1、JVM首先会去字符串常量池中查找是否存在"abc"这个对象2、如果不存在,则在字符串池中创建"abc"这个对象,然后将池中"这个对象的引用地址返回给字符串常量str,这样str会指向池中这个字符串对象;3、如果存在,则不创建任何对象,直接将池中这个对象的引用地址返回,赋给字符串常量str。二、使用new关键字创建:String str= new
2020-09-08 10:14:00 1414
原创 Java面试——基础——final 在 java 中有什么作用?
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)表示最终的、不可变的。1、修饰类当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。2、修饰方法final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此
2020-09-07 16:26:14 112
原创 Java面试——基础——两个对象的 hashCode()相同,则 equals()也一定为 true?
一、hashCodehashCode:是Java的本地方法,通过对象的内存地址(不止内存地址)计算出一个整数值,少数情况下,内存地址不同,这个整数值也有可能是相同的。例:Aa和BB的hashCode值是相同的二、equalsequals:是Java的本地方法,默认比较的是两个对象的内存地址是否相同。三、结论:综上所述可知,Aa和BB的hashCode值是相同的,但是他们的内存地址并不相同。题外话:hashMap 判断一个对象是否相等,首先通过比较对象的hashcode值是否相同,若是
2020-09-07 16:03:23 2994
原创 Java面试——基础——== 和 equals 的区别是什么?
一、“==”==在JAVA中只是一个运算符号。==是判断两个变量或实例是不是指向同一个内存地址。== 如果比较的是基本数据类型,比较的是值,如果比较的是引用数据类型,那么比较的是对象的引用内存地址二、equalsequals在JAVA中是一个方法。equals是判断两个变量或实例所指向的内存空间的值是不是相同。通常用做引用数据类型的比较,如果对象没有重写equals方法,那么比较的是对象的引用地址的一个hash值,如果重写了equals方法,那么比较规则根据你重写的方法来,需要注意的是,
2020-09-07 15:14:08 156
原创 Java面试——基础——JDK 和 JRE 有什么区别?
一、JRE(Java Runtime Environment)顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。二、JDK(Java Development Kit)顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jcons
2020-09-07 14:38:41 90
原创 MySQL———外键
众所周知:主键和适当的索引对于数据库表来说是必不可少的,但是外键却要尽量避免使用。矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是外键对性能的影响。正方观点:1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用
2020-09-07 10:44:34 84
原创 软件架构的发展历程
一、单体架构Web应用程序发展的早期,大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行,所有功能 模块使用同一个数据库。 下图是一个单体架构的电商系统:特点:1、所有的功能集成在一个项目工程中。2、所有的功能打在一个war包部署到服务器。 3、通过部署应用集群和数据库集群来提高系统的性能。优点:1、项目架构简单,前期开发成本低,周期短,小型项目的首选。2、开发效率高,模块之间交互采用本地方法调用。3、容易部署,运维成本小,直接打包为一个完整的包,拷贝到web容器的某个目
2020-09-01 16:20:40 1986
原创 MySQL——时间类型DATETIME和TIMESTAMP的选择
1、Year见名之意,year用于存储年,存储时只需要一个字节,插入数据时可以使用各种格式指定YEAR值(非常节约内存,所以当你只需要年的时候,用此字段合适)。2、Timetime用于存储时间信息,存储时需要三个字节。虽然,小时的范围是0~~23,但是为了表示某种特殊需要的时间间隔,将Time类型的范围扩大了。而且还支持了负值。(推荐甚至强制要求必须)字符串格式:‘HH:MM:SS’。例如,输入‘123456’,Time类型会转换成12:34:56;3、Datedate用于存储日期,没有时间
2020-09-01 14:45:46 1664 1
原创 Tomcat踩坑之------java.net.SocketException: Permission denied
Linux 通过bin文件夹下的./startup.sh启动无报错,奈何就是无法访问一、问题出现的原因:1、我把默认的Tomcat访问端口修改成为了802、我用的非root用户启动的Tomcat二、解决思路1、单凭bin文件夹下的./startup.sh启动无法查看完整的tomcat启动日志,误认为启动过程无错误2、进入tomcat文件夹下logs目录,通过命令tail -f catalina.out实时监控日志输出3、然后启动tomcat,发现tomcat启动异常 java.net.Sock
2020-08-31 14:15:24 2152 1
原创 JWT的使用场景和优劣
一、JWT应用场景一次性验证比如用户注册后需要发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活),不能被篡改以激活其他可能的账户…这种场景就和 jwt 的特性非常贴近,jwt 的 payload 中固定的参数:iss 签发者和 exp 过期时间正是为其做准备的。restful api 的无状态认证使用 jwt 来做 restful api 的身份认证也是值得推崇的一种使用方案。客户端和服务端共享 secret;过
2020-08-24 16:29:55 429
原创 MySql修改数据库编码字符集-----不同编码的含义
文章目录程序员阿宾的故事:一、查看各个变量的命令二、各个变量的含义三、离职交接四、我脑子里剩下的四、面试程序员阿宾的故事:唉,今天使用 show variables like'character%'命令查看了下数据库编码,发现好多有关的编码,一时间不知道要修改哪一个,于是乎一天啥也没干,刨根问底,弄清了各个属性的编码的含义,第二天就被老板开了。一、查看各个变量的命令MySQL命令行输入show variables like'character%得到如下结果:二、各个变量的含义characte
2020-08-07 20:42:57 748
原创 pom 文件中 parent 和 dependencyManagement 的使用
一、parent:子项目直接继承父依赖有三个项目A、B、C,它们都需要用到一个通用的包。如果分别在三个项目的pom文件中定义各自对这个包的依赖,那么当依赖的版本发生变化时,三个项目的pom文件都要改。这时候我们创建一个parent项目,打包类型为pom,再在parent项目新建三个项目A、B、C;在parent项目的pom文件中有的依赖,子项目都可以直接继承。 <!--父依赖:直接导入依赖,子类继承父依赖--> <parent> <groupId&
2020-08-04 09:54:46 1829 1
Elastic7.x语法版本操作手册
2022-11-22
如何解决大数据量的Excel上传下载问题?
2021-10-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人