java
文章平均质量分 68
PostgreSQL运维技术
这个作者很懒,什么都没留下…
展开
-
springboot无法注入httpservlectRequest
背景:SpringBoot开发接口,controller方法中注入javax.servlet.http.HttpServletRequest访问接口时报错,Failed to resolve argument 0 of type 'javax.servlet.http.HttpServletRequest' on public java.lang.Object原因:httpservlectRequest是web容器的,不是交给Spring容器管理的。解决:pom中引入spring-bo.原创 2021-02-04 16:25:25 · 2377 阅读 · 0 评论 -
Java线上问题排查神器——Arthas
搞了一个公众号PostgreSQL运维技术,欢迎来踩~悄悄放一张:Arthas是什么?中文名:阿尔萨斯,作者也许是个魔兽玩家..Arthas — 是阿里开源的java诊断工具。官方文档:https://arthas.aliyun.com/doc/quick-start.htmlArthas可以帮我们做什么?1、如果想在线上debug一个方法或者想看方法的返回,不需要申请线上debug,不需要重新加日志重新发布,直接watch指定的函数就可以看到调用...原创 2021-02-02 17:23:05 · 495 阅读 · 0 评论 -
ReentrantLock结合condition接口实现阻塞队列
sync结合wait和notify可以实现等待/通知机制。而Reentrantlock是借助Condition接口,利用它来实现多路通知功能。一个lock对象中,可以创建多个condition对象,线程对象可以注册在指定的condition上,从而可以有选择性的进行通知。在线程调度上更加灵活。下面是一个Reentrantlock结合condition接口实现阻塞队列的demo。阻塞队列需要满足下面两个特点。1、入队和出队线程安全2、当队列满时,入队线程会被阻塞,当队列为空,出队线程会被阻塞。原创 2020-11-03 10:00:15 · 667 阅读 · 0 评论 -
java HashMap的遍历
1. For-Each迭代keys和values。迭代keys:for (String key :mp.keySet()) { System.out.println("Key = " + key); System.out.println("Value = " + mp.get(key));}迭代values:for (String value : mp.values()) { System.out.println("Value = " + value);}原创 2020-10-23 14:40:01 · 136 阅读 · 0 评论 -
微服务网关spring cloud gateway
官网:https://cloud.spring.io/spring-cloud-gateway/reference/html/参考:B站尚硅谷Springcloud教程Gateway简介Cloud全家桶中有个很重要的组件就是网关,在1.x版本采用的是Zuul网关,但在2.x版本中,zuul的升级一直没有很好的开展下去,SpringCloud最后自己研发了一个网关替代Zuul,即gateway,所以可以说gateway是原zuul1.x版本的替代。SpringCloud gateway作为S.原创 2020-09-30 17:33:57 · 465 阅读 · 0 评论 -
使用channel的transferFrom方法,实现文件拷贝
demo:import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.channels.FileChannel;public class TestDemo1 { public static void main(String[] args) throws IOException { FileInputStream fil原创 2020-09-24 18:08:27 · 1695 阅读 · 0 评论 -
mvn中使用jetty插件
1、pom文件中配置jetty插件。首先打开项目的pom.xml文件,然后找到build节点,在其中添加plugins节点,然后再添加jetty插件示例: <build> <finalName>testapi</finalName> <plugins> <!-- --> <plugin> <groupId>org.eclipse.jetty</gro原创 2020-09-24 17:28:11 · 484 阅读 · 0 评论 -
idea查看当前所有的子类
方法:点击某个类,菜单栏Navigate--->Type Hierarchy原创 2020-09-08 18:12:00 · 2639 阅读 · 0 评论 -
Session的序列化、钝化和活化应用场景
序列化与钝化、活化应用场景的区别序列化:一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而用户会话还在进行相应的操作,这时就需要使用序列化将session信息保存起来放在硬盘,服务器重启后,又重新加载。这样就保证了用户信息不会丢失,实现永久化保存活化和钝化:淘宝每年都会有定时抢购的活动,很多用户会提前登录等待,长时间不进行操作,一致保存在内存中,而到达指定时刻,几十万用户并发访问,就可能会有几十万个session,内存可能吃不消,这时就需要进行对象的钝化、活化,让其在闲置的时候离开原创 2020-09-04 10:12:34 · 470 阅读 · 0 评论 -
javaweb之过滤器
过滤器:过滤器实际上是对web资源进行拦截,做一些处理后再交给下一个过滤器或sevlet处理。通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。过滤器如何编写?1. 写一个类实现Filter接口。2.在web.xml中进行配置。Filter接口的生命周期?void int(FilterConfig):创建之后,马上执行;Filter会在服务器启动时就创建!void destory():销毁之前执行!在服务器关闭时销毁。void doFilter(Se.原创 2020-09-03 18:21:02 · 418 阅读 · 0 评论 -
web.xml中load-on-startup的作用
参考:web.xml中load-on-startup的作用使用示例:<servlet> <servlet-name>test</servlet-name> <servlet-class>com.web.servlet.testServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>用法:原创 2020-09-02 14:53:56 · 262 阅读 · 0 评论 -
递归与栈
参考:https://blog.csdn.net/bobbypollo/article/details/79891556《java数据结构和算法》什么是递归?递归的基本思想:就是把规模较大的一个问题,分解成规模较小的多个子问题去解决,而每一个子问题又可以继续拆分成多个更小的子问题。最重要的一点就是假设子问题已经解决了,现在要基于已经解决的子问题来解决当前问题;或者说必须先解决子问题,再基于子问题来解决当前问题。或者换种角度理解:递归解决的是有依赖顺序关系的多个问题。假设问题有如下的依赖.原创 2020-08-21 17:39:37 · 4966 阅读 · 0 评论 -
数据结构之二叉堆
参考:《漫画算法:小灰的算法之旅》二叉堆本质上是一种完全二叉树,它分为两个类型。最大堆和最小堆。最大堆:最大堆的任何一个父节点的值,都大于或等于它左、右孩子节点的值。最小堆:最小堆的任何一个父节点的值,都小于或等于它左、右孩子节点的值。二叉堆的根节点叫做堆顶。注:什么是完全二叉树,理解完全二叉树,需要了解什么是满二叉树,一个二叉树的非叶子节点都存在左右孩子,并且所有叶子节点都在同一层级上,那么这个树就是满二叉树。简单地说,满二叉树的每一个分支都是满的。完全二叉树的定义:对于一个有n个节点的原创 2020-08-19 18:06:05 · 224 阅读 · 0 评论 -
Quartz的学习笔记
QuartzQuartz是一个完全由java编写的开源作业调度框架。它可以创建简单或者复杂的几十、几百、甚至成千上万的job。此外,quartz调度器还支持JTA事务和集群。添加依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}&l原创 2020-08-11 15:02:37 · 440 阅读 · 0 评论 -
Rest Api访问控制
2000年,Roy Thomas Fielding在他的博士论文中提出的概念。 Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。这个词组的翻译是"表现层状态转化"。REST API一般用来将某种资源和允许的对资源的操作暴露给外界,使调用者能够以正确的方式操作资源。Rest API需要清晰定义哪些操作能够公开访问,哪些操作需要授权访问。一般而言,如果对RestAPI的安全性要求比较高,那么,所有的API的所有操作均需得到授原创 2020-08-07 14:21:52 · 377 阅读 · 0 评论 -
java log4j的使用
概述Log4j的是java的一种常用的日志框架。log4j是一个组件化设计的日志系统,它的架构大致如下:当我们使用Log4j输出一条日志时,Log4j自动通过不同的Appender把同一条日志输出到不同的目的地。Log4j有三个重要的组件:Logger(记录器)、Appenders(输出源)和Layouts(布局)Loggers:在系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个按级别顺序递增,DEBUG < INFO < WA...原创 2020-07-29 17:13:47 · 496 阅读 · 0 评论 -
dubbo总结
dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。架构参考:https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/data-communication/dubbo.md上述节点简单说明:Provider:暴露服务的服务提供方 Consumer:调用远程服务的服务消费方 Registry:服务注册与发现的注册中心 Monitor:统计...原创 2020-06-27 17:18:11 · 205 阅读 · 0 评论 -
怎么理解RPC?
参考:https://www.zhihu.com/question/41609070/answer/1030913797RPC(romote procedure call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。过程其实就是方法。所以PRC可以理解为远程方法调用。这里的远程调用是相对于本地调用的。假如你有一个Calculator接口,以及他的实现类CalculatorImpl, 在单体应用中,要调用Calculator的add方法来执行一个加运算原创 2020-06-27 10:44:32 · 267 阅读 · 0 评论 -
windows下使用zkui
zkui是zookeeper的图形化界面客户端,zookeeper的安装见(https://blog.csdn.net/qq_35462323/article/details/106939598)1、从源代码生成可执行jar。zkui在github上的地址:https://github.com/DeemOpen/zkui项目下载下来,可以选择用git clone,或者直接用浏览器下载压缩包,最后都是为了解压后的文件夹。2、解压文件夹,在项目根目录执行maven clean install,执原创 2020-06-25 12:30:26 · 682 阅读 · 0 评论 -
Unable to locate Spring NamespaceHandler for XML schema namespace :dubbo 报错
dubbo项目报错:Unable to locate Spring NamespaceHandler for XML schema namespace [http://dubbo.apache.org/schema/dubbo]dubbo依赖配置: <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</ar.原创 2020-06-25 11:33:14 · 635 阅读 · 0 评论 -
Java的SPI机制
参考:https://www.jianshu.com/p/46b42f7f593chttps://blog.csdn.net/djrm11/article/details/88695347SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容原创 2020-06-24 19:38:36 · 340 阅读 · 0 评论 -
zookeeper单机模式安装(windows)
参考:https://blog.csdn.net/tlk20071/article/details/520289451、下载地址:https://mirrors.cnnic.cn/apache/zookeeper/,选择最新的版本进行下载。我是下载的zookeeper-3.4.14.tar.gz2、解压解压到指定目录下,我是D:\zookeeper-3.4.14。3、修改D:\zookeeper-3.4.14\conf\zoo_sample.cfg文件名为zoo.cfg,文件内容..原创 2020-06-24 11:15:28 · 305 阅读 · 0 评论 -
java的乐观锁和悲观锁
参考:https://www.cnblogs.com/jyroy/p/11365935.htmlhttps://www.jianshu.com/p/ae25eb3cfb5d乐观锁和悲观锁乐观锁和悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。乐观锁:对于并发操作产生的线程安全问题持乐观态度,认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据,如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被原创 2020-06-23 22:05:14 · 2724 阅读 · 0 评论 -
java面试题
基本- “a==b”和”a.equals(b)”有什么区别?答案:如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true,而 a.equals(b) 是进行逻辑比较,所以通常需要重写该方法来提供逻辑一致性的比较。例如,String 类重写 equals() 方法,所以可以用于两个不同对象,但是包含的字母相同的比较。- a.hashCode() 哈希 有什么用?与 a.equals(b) 一口式方法 有什么关系?答..原创 2020-06-19 10:21:17 · 358 阅读 · 0 评论 -
idea @Override is not allowed when implementing interface method
项目基于jdk8。@Override报错:@Override is not allowed when implementing interface method解决:1、File ——> Project Structure ——>[ 项目名称 ]——>Language level 修改成 “8-Lambdas,type annotations etc.”原创 2020-06-16 15:30:55 · 205 阅读 · 0 评论 -
java并发三剑客之CyclicBarrier、CountDownLatch、Semaphore
看了大佬的专栏,https://blog.csdn.net/heihaozi/category_10085170.html。感叹,写的真好。自己总结记录下。CyclicBarrierCyclicBarrier: 循环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。这个状态可以说是barrier,当调用await之后,线程就处于barrier状态了。怎么理解循环?循环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。...原创 2020-06-15 16:37:45 · 389 阅读 · 1 评论 -
java序列化之writeObject 和readObject
什么是序列化和反序列化?序列化:将对象转化为字节的过程称为序列化过程。反序列化:将字节转化为对象的过程称为反序列化。序列化主要应用于网络传输和数据存储的场景。在java中,只有类实现了java.io.serializable接口,该类才能被序列化。示例Demo1.java:package com.example.demo;import java.io.*;public class Demo1 { public static class Person implements S原创 2020-06-05 15:21:04 · 8527 阅读 · 0 评论 -
常用数据结构之线性表
线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。就像小学生排队过马路一样,彼此手拉手,每份数据的前面和后面各有一份数据,从整体上看连成了“一条线”。线性表中的个数n定义为线性表的长度,n=0时称为空表。在非空表中每个数据元素都有一个确定的位置,如用ai表示数据元素,则i称为数据元素ai在线性表中的位序。线性表的相邻元素之间存在着序偶关系。如原创 2020-06-04 18:51:09 · 356 阅读 · 0 评论 -
SpringBoot之常用注解@value、@Import、@ImportResource等
前面的文章中有提到Spring中bean的配置方式有三种:基于xml的配置、基于注解的配置和基于java的配置。而SpringBoot提倡基于Java的配置。其常用的配置有@Value、@Import、@ImportResource、@PropertySource@Value通过@Value可以将外部的值动态注入到Bean中。比如application.properties中添加属性:domain.name=testxxx怎么引用? @Value("${domain.name原创 2020-06-04 14:38:22 · 1041 阅读 · 0 评论 -
@Autowired 与@Resource注解的区别
区别:@Autowired默认是按类型装配,且这个注解是属于spring的,默认情况下必须要求依赖对象必须存在,如果要运行null值,可以设置它的required属性为false,即@Autowired(required=false)。如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:@Resource默认是按照名称来进行装配。名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,按照名称查找,如果注解写在setter方法上默认取属性名进行原创 2020-06-04 11:41:53 · 211 阅读 · 0 评论 -
附近地点搜索解决方案之基于球面距离公式的算法
球面上任意两点之间的距离计算,我们采用Haversine公式。其中R为地球半径,取6371km; φ1, φ2表示两点的纬度; Δλ 表示两点经度的差值。 d就是我们要求的距离用python实现下计算球面两点之间距离的函数:from math import sin, asin, cos, radians, fabs, sqrtEARTH_RADIUS=6371 # 地球平均半径,6371kmdef hav(theta): s = s...原创 2020-06-03 17:48:42 · 596 阅读 · 0 评论 -
@Controller和@RestController的区别
区别:@Controller:使用@Controller注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面若返回json等内容到页面,则需要加@ResponseBody注解。@RestController:相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,ht原创 2020-06-03 14:30:53 · 375 阅读 · 0 评论 -
java之Class类
Class类也是一个Java类,它也可以实例化得到对象,与普通类不一样的是Class类中存储的是其它类的类型信息。位于java.lang包。声明:public final class Class<T>implements java.io.Serializable, java.lang.reflect.GenericDeclaration,java.lang.reflect.Type,java.lang.reflect.AnnotatedElementclass类有final 修饰.原创 2020-06-01 18:54:34 · 3782 阅读 · 0 评论 -
java ORM之Mybatis
参考:https://blog.csdn.net/hellozpc/article/details/80878563《深入浅出Mybatis技术》传统JDBCJava程序都是通过JDBC(java data base connectivity)连接数据库的,这样我们可以通过SQL对数据库编程。比如下面的JDBC的一个demo:JDBCTest.javaimport java.sql.Connection;import java.sql.DriverManager;import.原创 2020-05-29 17:47:01 · 490 阅读 · 0 评论 -
java动态代理
参考:https://www.zhihu.com/question/20794107/answer/658139129bravo1988的回答什么是代理?代理是一种设计模式。当我们想要添加或修改已经存在的类的某些功能时,我们创建并使用代理对象。使用代理对象而不是原始对象。通常,代理对象具有与原始对象相同的方法,并且在Java代理类中通常扩展原始类。代理有一个原始对象的句柄,可以在这个句柄上调用方法。一个对象的创建过程。可见要创建一个实例,最关键的是得到对应的class对象。能否不..原创 2020-05-27 18:33:08 · 200 阅读 · 0 评论 -
Spring的InitializingBean和DisposableBean
InitializingBeanInitializingBean接口为Bean提供了初始化方法,它只包含afterPropertiesSet方法。在spring初始化bean的时候,如果该bean是实现了InitailizingBean接口,则系统会调用afterPropertiesSet方法。package org.springframework.beans.factory;public interface InitializingBean { void afterPropertie原创 2020-05-26 15:52:18 · 259 阅读 · 0 评论 -
Spring的IoC
文章参考:王福强老师的《Spring揭秘》一书。IoC:Inversion of control(控制反转),或者叫DI (依赖注入)。为什么是控制反转?创建java SE程序设计中,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象,而IoC是有专门的容器来创建这些对象并注入依赖对象,对象只是被动的接受依赖对昂。DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖原创 2020-05-26 11:59:52 · 145 阅读 · 0 评论 -
Spring整合Junit
1、引入依赖:使用spring的测试框架需要加入以下依赖包:JUnit、Spring Test (Spring框架中的test包)以及Spring 相关其他依赖包。 <properties> <junit.version>4.12</junit.version> <spring.version>4.1.3.RELEASE</spring.version> </properties> <dependen原创 2020-05-21 10:43:25 · 204 阅读 · 0 评论 -
Spring的Bean类?
Spring Bean是事物处理组件类和实体类(POJO)对象的总称,Spring Bean被Spring IOC容器初始化,装配和管理。在Spring IOC容器管理Bean时,需要了解Bean的类名、名称、依赖项、属性、生命周期以及作用域等信息。Bean类的配置项Spring IOC容器管理Bean时,需要了解Bean的类名、名称、依赖项、属性、生命周期及作用域等信息。为此,Spring IOC提供了一系列配置项,用于Bean在IOC容器中的定义。1、class:该配置项是强制项,用于指定创原创 2020-05-20 19:09:02 · 366 阅读 · 0 评论 -
“Main.this” cannot be reference from a static context
报错的代码如下:记录下错误原因,基础知识理解不正确导致的。原因:1、上面的问题主要是因为InnerClass是成员内部类,构造一个成员内部类对象时应使用:InnerClass cc = new Main().new InnerClass();2、或者可以使用静态内部类,InnerClass加上static关键字,静态内部类的创建不需要依赖外部类。...原创 2020-05-17 10:17:26 · 2193 阅读 · 0 评论