随笔分类 -  java知识

摘要:下载最新的二进制版本。并将压缩文件解压缩到本地磁盘中。例如:D:\rocketmq 添加环境变量 您需要设置环境变量。 在桌面上,右击计算机图标。 从上下文菜单中选择“属性”。 单击“高级系统设置”链接。 单击“环境变量”。 然后添加或更改环境变量。 ROCKETMQ_HOME="D:\rocket 阅读全文
posted @ 2020-09-01 03:37 会偷袭的猫 阅读(695) 评论(0) 推荐(0)
摘要:1.理解死锁 线程死锁描述的是一种情况:多个线程被同时阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程被无限期的阻塞,因此程序无法正常终止。 eg:如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。 2.产生死 阅读全文
posted @ 2020-08-30 22:05 会偷袭的猫 阅读(510) 评论(0) 推荐(0)
摘要:volatile 关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被 volatile 修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 方式一:变量不使用 阅读全文
posted @ 2020-08-26 22:40 会偷袭的猫 阅读(1291) 评论(0) 推荐(0)
摘要:引用与对象 每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。 //创建一个引用,引用可以独立存在,并不一定需要与一个对象关联 St 阅读全文
posted @ 2020-08-25 23:50 会偷袭的猫 阅读(195) 评论(0) 推荐(0)
摘要:API接口的安全性主要是为了保证数据不会被篡改和重复调用,实现方案主要围绕Token、时间戳和Sign三个机制展开设计。 1. Token授权机制 用户使用用户名密码登录后服务器给客户端返回一个Token(必须要保证唯一,可以结合UUID和本地设备标示),并将Token-UserId以键值对的形式存 阅读全文
posted @ 2020-08-25 21:45 会偷袭的猫 阅读(949) 评论(0) 推荐(0)
摘要:首先@Component和@Bean都可以注册Bean。 区别在于: @Component放在类上,表示这个类是组件类,Spring要为这个类创建bean。@Component 和@Repository , @ Controller , @Service一样,局限于自己编写的类中. @Bean放在方 阅读全文
posted @ 2020-08-22 00:31 会偷袭的猫 阅读(710) 评论(0) 推荐(0)
摘要:前言 在日常中工作中,我们时不时会代码进行一些优化,比如用新的算法,简化计算逻辑,减少计算量等。对于java程序来说,除了开发者本身对代码优化之外,还有一个"人"也在背后默默的优化我们的代码,这个"人"就是jvm。jvm会帮我们分析出热点代码,优化代码逻辑。其中jvm最常做的优化之一就是:方法内联优 阅读全文
posted @ 2020-08-15 19:14 会偷袭的猫 阅读(1049) 评论(1) 推荐(0)
摘要:1. 十进制转二进制 原理:给定的数循环除以2,直到商为0或者1为止。将每一步除的结果的余数记录下来,然后反过来就得到相应的二进制了。 比如8转二进制,第一次除以2等于4(余数0),第二次除以2等于2(余数0),第三次除以2等于1(余数0),最后余数1,得到的余数依次是 0 0 0 1 , 反过来就 阅读全文
posted @ 2020-07-09 00:48 会偷袭的猫 阅读(736) 评论(0) 推荐(0)
摘要:一.什么是幂等性 幂等性:客户端以相同的方式重复调用服务就应该产生相同的结果。 二.为什么需要幂等性 例如:下订单的时候,点击支付之后没反应,就多点击了几次。在这种情况下,如果接口不是幂等性,那么就会出现重复支付问题。 三.如何实现幂等性 1.通过唯一的业务单号来保证。 2.通过锁机制来实现。 3. 阅读全文
posted @ 2020-07-02 00:48 会偷袭的猫 阅读(261) 评论(0) 推荐(0)
摘要:如何使用工厂模式 工厂模式可以分成三类: 简单/静态工厂模式 工厂方法模式 抽象工厂模式 1.1工厂方法模式 下面以一个什么水果都有的水果店举例子 package com.cat.factory; /** * 什么水果都有的水果店(工厂) */ public interface FruitFacto 阅读全文
posted @ 2020-06-15 23:09 会偷袭的猫 阅读(135) 评论(0) 推荐(0)
摘要:clone方法用于对象的克隆,一般想要克隆出的对象是独立的(与原有的对象是分开的) 深拷贝指的是该对象的成员变量(如果是可变引用)都应该克隆一份,浅拷贝指的是成员变量没有被克隆一份 clone用法: 那么我们如何克隆对象呢?无论是浅拷贝还是深拷贝都是这两步: 克隆的对象要实现Cloneable接口 阅读全文
posted @ 2020-06-13 17:10 会偷袭的猫 阅读(266) 评论(0) 推荐(0)
摘要://汽车接口 public interface Car { //驾驶 void drive(); } //轿车类 public class Bus implements Car { @Override public void drive() { System.out.println("驾驶轿车"); 阅读全文
posted @ 2020-06-13 14:57 会偷袭的猫 阅读(268) 评论(0) 推荐(0)
摘要:JavaWeb有ServletContext、ServletRequest、HttpSession、PageContext四大域对象,下面主要从域对象的生命周期、作用、作用范围进行介绍。 Servlet中只有前三个域对象,JSP中多了一个pageContext对象。 一、ServletContext 阅读全文
posted @ 2020-06-12 14:47 会偷袭的猫 阅读(214) 评论(0) 推荐(0)
摘要:/** * 被代理类(猫) */ public class Cat implements Action{ @Override public void eat(){ System.out.println("猫吃饭了!"); } } /** * 静态代理需要自己写代理类-->代理类需要实现与目标对象相同 阅读全文
posted @ 2020-06-11 21:58 会偷袭的猫 阅读(200) 评论(0) 推荐(0)
摘要:1.在pom.xml下添加Junit依赖: <!--添加junit环境的jar包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> 阅读全文
posted @ 2020-05-15 20:51 会偷袭的猫 阅读(443) 评论(0) 推荐(0)
摘要:1.编写分页插件配置类config: //Spring boot方式 @EnableTransactionManagement @Configuration @MapperScan("com.itheima.mapper") public class MyBatisPlusConfig { /** 阅读全文
posted @ 2020-04-14 14:39 会偷袭的猫 阅读(598) 评论(0) 推荐(0)
摘要:一般递归: 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归 阅读全文
posted @ 2019-11-07 10:02 会偷袭的猫 阅读(553) 评论(0) 推荐(0)
摘要:1、前言 在使用spring开发过程中,我们基本上都是使用@Autowired这个注解,用来注入已有的bean。但是有些时候,会注入失败。当我们加上参数(required=false)就能解决。今天整理一个我在实际开发中的例子 2、required属性 @Autowired(required=tru 阅读全文
posted @ 2019-10-19 11:30 会偷袭的猫 阅读(3602) 评论(0) 推荐(0)
摘要:package xcc.mapTest; /** * @Decription: 接口 * @Author: * @Date: * @Email: **/ public interface Function { /** * 要做的事情 */ void invoke(); } package xcc.mapTest; import java.util.Map; /** * @Decription: 代 阅读全文
posted @ 2019-10-16 21:15 会偷袭的猫 阅读(3478) 评论(0) 推荐(0)
摘要:1.定义格式 * a 第一种定义格式: * int[][] arr = new int[3][4];// arr里面包含3个数组 每个数组里面有四个元素 * 上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组 * b 第二种定义格式 * int[][] arr = new int[3][]; ... 阅读全文
posted @ 2019-09-30 16:54 会偷袭的猫 阅读(249) 评论(0) 推荐(0)