- 博客(91)
- 资源 (5)
- 收藏
- 关注
原创 序列化的坑InvalidClassException
serializable 是一个标记,java中类要序列化必须实现这个接口;不默认实现可能是为了安全。由于序列化id不同已经读不到了。
2023-05-24 17:04:17 203
转载 百度网盘秒传的秘密【转载】
甚至,有人还基于此提出一种哈希碰撞攻击:如果我知道一个文件的md5值,但拿不到这个文件,我通过数学计算,构造一个相同md5的文件,那岂不是就把那个文件直接给我转存过来了?可以看到,百度网盘对文件进行了分块传输,这也是目前业界比较流行的做法,对大文件进行分块,如果网络不好断开了,下次只需要传输剩下的分块就行了,做到了断点续传。我又打了断点在计算的位置,发现它计算的跟我计算的又是一样的,但通过网络发出去以后就变了,真是薛定谔的MD5,奇怪了!我把我的猜测告诉了他,结果他问了一句:如果发生哈希冲突了怎么办呢?
2023-03-01 10:28:50 2257
原创 Redisson Lock--分布式锁
RedissonClient-(getLock)->RedissonLock-(lock)->tryAcquire-(同步转异步)->tryAcquireAsync-(最终调用)->tryLockInnerAsync-(lua脚本)->lua(脚本原子性,发送)–>redis服务器接受请求,执行脚本。
2022-09-22 19:52:53 1042
原创 java 正常写入的文件文件读取失败--序列化的坑
● 实体类的信息需要持久化,实现了接口serializable,但没有指定值private static final long serialVersionUID;在之后使用的时候文件在服务器上但即使读取不到。serializable 是一个标记,java中药序列化必须实现这个接口;不默认实现可能是为了安全由于序列化id不同已经读不到了。
2022-09-22 19:47:46 700
原创 mybatisplus的updateById() 更新null失败
● myabtisplus 使用updateById() 方法更新,若字段为空字符或null默认会被myabtisplus忽略,不会对数据库进行更新。
2022-09-22 19:44:35 1075
原创 java日期格式化的坑
日期格式化的坑● 日期格式化时,传入的pattern中表示年份要用小写的‘y’。● 小写‘yyyy’表示当天所在的年,大写的‘YYYY’表示week in which year(JDK7之后引入的概念),意思是当天所在的周所属的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年。● M表示月份;m表示分钟。● H表示24小时制;h表示12小时制。...
2021-11-30 10:42:39 280
原创 java高效的字符串拼接,“+” 与concat()
● 循环体内,字符串拼接,用StringBuilder的append;● “+”会每次循环都new一个StringBuilder对象,然后进行append操作,最后通过toString方法返回,浪费内存资源。//不好都代码String str = "star";for (int i = 0;i<100; i++){ str = str + "aaa";}...
2021-11-30 10:42:01 713
原创 java浮点数比较的坑
浮点数的判断—《阿里开发手册》● 基本类型不能用==判断,包装类型也不能用equals判断。● 说明:浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式。二进制无法精准表示大部分的十进制小数。float a = 1.0f-0.9f;float b = 0.9f - 0.8f;if(a==b){} // falseFloat x = Float.ValueOf(a);Float y = Float.ValueOf(b);if(x.equals(y)){} //f
2021-11-29 19:55:10 401
原创 java中的方法签名
java方法签名● 组成○ 方法名。○ 参数列表(类型、个数、顺序)。● 注意!○ 与返回值、修饰符以及异常无关。○ 在Class文件格式中,返回值不同,可以合法地共存于一个Class文件中。○ 范型中,类型擦除,List与List是相同参数List。○ 参数String… str 与参数String[] str 是相同参数。● 重写与重载○ 重写:同一个类中方法签名不同的方法。○ 重载:方法签名必定相同,返回值必定相同,访问修饰符子>父,异常类 子<父。...
2021-11-29 19:53:17 1054 1
原创 POST与PUT
Http-POST-PUT问题,devops中的标记管理遇见,更新标记的时候更新目标创建时标记描述选择空白时用createRelease()非空白用updateRelease(),深挖发现,最终一个post请求,一个put请求。创建描述空白时,查询标记的反参是没有release内容的。post与put有什么区别呢?PUT :http对URI发送一个entity,服务器在URI下如果有了一个entity,那么替换新的,并且保证幂等;若服务器没有,就新增。利用PUT提交,需要客户端提交资源全部
2021-11-02 20:57:18 405
原创 注解、事务、@Transactional
事务@Transactional基于动态代理机制生效条件注释的方法不能private注释的方法必须是有接口的方法实现(Impl实现类)(通过spring面向接口编程的套路)注释的方法必须通过接口的方式调用(注解本质也是代理,同一个类中直接调用本类的方法,是不会产生代理的,所以注解都不会生效)...
2021-11-02 20:54:39 189
原创 注解@Mapper 与@MapperScan
注解@Mapper 与@MapperScanmapper注解 :在dao层,需要每个接口都加上。最终mybatis会有拦截器自动为mapper标记都接口生成代理类,可在MapperRegistry代码查看。mapperscan注解:指定扫描接口都路径,在启动类加,可替代mapper注解(省去mapper注解)。使用后自动生成MapperFactoryBean;不使用就不生成实例,走@Import配置具体可以在 AutoConfiguredMapperScannerRegistrar 和 Mybatis
2021-11-02 20:53:18 1354
转载 dubbo的异常处理,全局异常打印堆栈信息
Dubbo全局异常打印堆栈信息问题问题dubbo的服务提供端的异常返回到消费端时会被拦截,不符合条件的会被转化为字符串,变为RuntimeException异常返回。会导致有全限定名等无用信息。dubbo官方推荐的异常和日志 链接尽可能携带完整的上下文信息,比如出错原因,出错的机器地址,调用对方的地址,连的注册中心地址,使用 Dubbo 的版本等。尽量将直接原因写在最前面,所有上下文信息,在原因后用键值对显示。抛出异常的地方不用打印日志,由最终处理异常者决定打印日志的级别,吃掉异
2021-11-02 20:52:22 911
转载 调用第三方接口的三种方式
调用第三方接口到三种方式链接Hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.1.0</version></dependency> <!-- json依赖 --><dependency>
2021-11-02 20:48:28 5807
原创 nexus api鉴权,auth,请求头
nexus3Apidevops二开,用到nexusAPI ,之前get获取列表没有鉴权,新客户get也需要session,网上api资料较少,官网看到curl -u admin:admin123 -X GET 'http://localhost:8081/service/rest/v1/components?repository=maven-central' ; 链接后又查了 curl 转postman的地址链接;要添加请求头属性Authorization,value为"Basic "加 “adm
2021-10-27 10:38:41 1636
原创 架构改Dubbo后的序列化问题,JSON 与javabean 转换问题,范型嵌套
Dubbo序列化的坑起因:因devops用到一些org.gitlab4j.api.models的一些类,但是没有实现序列化接口,sdk也不能更改。sdk的类嵌套了很多层,也不能本地开放接口。过程:暂时先转json字符串后web层转回java bean处理。选择了fastjson工具。转换:JSON.toJSONString();转回:JSON.parseObject(xxString,xx.class);问题:但是list范型转回的时候报错:java.lang.ClassCastExceptio
2021-10-27 10:34:59 599
原创 dubbo隐式传参,RpcContext,dubbo Session消费端问题
dubbo 隐式传参+过滤器dubbo,web(消费端)与service(提供端)rpc通信,要传递的实体类必须序列化;有着不同的上下文,web的session,service无法获取。方案:web获取当前登录人名称,传入RpcContext上下文,隐式传参到service端。通过调用拦截器拦截消费断调用方法,调用前传。因项目需要,service模块无法获取session,无法获取当前登陆账户。临时采取这种方案,将web端当前登陆用户名传递给RpcContext上下文,供service使用。先配置
2021-10-19 21:51:00 885 2
原创 Library source does not match the bytecode for class
IDEA 出现错误 :Library source does not match the bytecode for class,库源与类的字节码不匹配解决1、IDEA --file --Invalidate Caches/Restart… 清缓存不行了2、找到本地仓库,删除对应的包,重新下载编译
2021-10-13 17:51:43 926
原创 skipping mapperfactorybean with name xx and xx bean already defined the same name!
springboot + dubbo + mybatis 启动报‘skipping mapperfactorybean with name xx and xx bean already defined the same name!原因:配置中存在多次扫描包,导致跳过扫描。
2021-10-12 20:17:23 1621
原创 接口工具--Swagger
引入依赖<!--swagger--><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId></dependency><!--swagger ui--><dependency> <groupId>io.springfox</groupId>
2021-08-03 11:57:33 468 1
原创 MybatisPlus的代码生成器
MybatisPlus代码生成器,可根据数据库快捷生成实体类,service,mapper等模板。public void genCode() { // 1、创建代码生成器 AutoGenerator mpg = new AutoGenerator(); // 2、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getPrope.
2021-08-03 11:44:02 275
转载 JAVA基础--Synchronized原理
背景6之前是重量级锁依赖硬件实现。与Lock性能差距很大。6之后进行了优化,锁升级机制,与Lock性能相当。原理保证方法或代码块在运行时,同一时刻只有一个方法可进入临界区,同时还可保证共享变量的内存可见性。java每个对象都可加锁,这是Synchronized实现同步的基础普通同步方法,锁是当前实例对象静态同步方法,锁是当前类的Class对象同步方法块,锁的括号里面的对象public calss SynchronizedTest{ public Synchronize
2021-06-28 09:52:16 135
原创 杂记--网络的请求流程
网页请求流程浏览器解析url查找域名对应的ip地址DNS解析,过程:(浏览器缓存、路由器缓存、DNS服务器缓存)浏览器向web服务器发送HTTP请求Cookies会随请求发送给服务器服务器处理处理请求、参数、cookies,生成html响应服务器返回html响应客户端解析响应,显示页面。2-5涉及协议:TCP:与服务器建立连接。IP:建立TCP协议需要发送数据,发送数据网络层使用IP协议。OSPF:IP数据包在路由器之间,路由选择使用OSPF协议。AR
2021-06-20 16:49:28 244 1
转载 Docker
常见命令作为简单记录docker --versiondocker pull xxxdocker rmi xxxdocker search xxxdocker imagesdocker image lsdocker[image] run xxxdocker create xxxdocker run -itd --name redis-test -p 6379:6379 redisdocker[container] run xxxdocker[container] restart x
2021-06-20 16:46:38 104
原创 设计模式--代理模式
代理模式为什么需要隔离真是对象,开闭原则(对修改封闭,对扩展开放)什么是定义接口和方法。真实对象实现接口(非必须)创建代理类,实现接口,并内部持有真是对象(private User user)。优缺点职责清晰高扩展智能化性能额外工作量实现方法静态代理需要为每个代理对象创建一个代理类。动态代理是运行中自动生成,不用手动创建。静态JDK动态cglib动态动态代理动态代理利用的是反射技术JDK动态涉及的两大核心类是Proxy
2021-06-20 16:44:27 91
原创 JAVA基础--异常
RuntimeException运行时异常,及其子类统称非受检查异常,如:、NPE空指针异常、NumberFormatException字符串转换异常、ArrayInedxOutOfBoundsException数组越界、ClassCastException类型转换错误、ArithmeticException算术错误等。三种情况finally不会执行try或finally中使用了System.exit(int)退出程序,但是若 System.exit(int)在异常语句之后,finally还...
2021-06-20 16:42:39 100
原创 JAVA基础--多线程
前言JAVA线程状态经常有人搞混,说5种6种甚至7种都有。其实5种是操作系统的线程状态,JAVA有6种,Thread源码的枚举类型statue有提现。NEW:被创建,还没有调用start()方法;RUNNABLE:运行中,JAVA中把操作系统的就绪(ready),运行(running)统称为”运行中“。线程对象被创建后,其他线程(如main)调用了该对象的start方法,该状态的线程位于可运行线程池中,等待被线程调度选择,获取cpu权限,此时是就绪(ready)。就绪状态的线程获取
2021-06-20 16:41:48 130
原创 JAVA基础--克隆,深浅拷贝
克隆条件实现Clonyable接口(标记接口,自身没有方法。)覆盖Object的clone()方法,默认可见性为protected,需要提升至public。浅拷贝不对clone()改造,只提升可见性。被复制对象若有引用对象属性,克隆后的对象的引用属性仍然指向被克隆对象。默认的clone方法仍然是赋值。深拷贝需要引用类型属性的类也要实现clone。@Datapublic class Address implements Cloneable { private St
2021-06-20 16:38:39 133
原创 设计模式之工厂方法模式、简单工厂模式、抽象工厂模式
工厂方法模式、简单工厂模式、抽象工厂模式前言:平时创建对象时,通过new关键字,如User user = new User();,在一些情况下,要创建的对象需要经过一系列复杂的初始化操作,比如查配置文件、查数据库、初始化成员对象等,如果都放在构造函数,极大的影响性能。这时候一个专门负责对象的创建的类就是必要的,这就是工厂类,这种做法就是工厂模式,在任何需要生成复杂对象的地方,都可以使用。包括简单工厂(不在23中设计模式中)、工厂方法和抽象工厂。解决的问题客户端再调用时不想判断实例化哪一个类,或
2021-06-05 16:54:29 148
转载 JAVA8新特性
JAVA8新特性:lambda表达式允许把函数作为一个方法的参数,函数作为参数传递到方法中。方法引用提供了非常有用的语法,可以直接引用已有的java类或对象(实例)的方法或构造器。与lambda联合使用,可以使语言的构造更加紧凑简洁,减少冗余。默认方法一个在接口里面有了一个实现的方法。新编译工具新的编译工具,nashorn引擎jjs、类依赖分析器jdeps。Stream APIjava.util.stream,把真正的函数式编程风格引入到java中。
2021-06-05 16:52:28 100
原创 oracle与mysql常见区别
事务mysql默认自动提交,Oracle,需手动提交,需写commit指令分页Mysql:select … from … where … limit x,y;Oracle:select … from … where …rownum>x and rownum <y;执行计划S :< select * from xxx limlt 5,5>explainO:<select * from xxx where rownum.
2021-06-05 16:49:33 218
原创 SQL优化
1.索引经常查询的,经常修改的不建,like 前%索引失效.2.Explain查新执行计划字段table:表名.type:重要,表示连接使用了那种类型.从好到差:const,eq_reg,ref,range,index和all.(至少range以上).possible_keys:可能应用的索引.key:实际使用的索引.key_len:索引长度,不损失精度情况下,越小越好.rowsmysql认为的检索行数.3.子查询优化in改为join,distinct去重4.
2021-06-05 16:48:01 92
原创 利用反射创建对象的方式
利用反射创建对象的方式:Fruit apple = new Fruit();获取类的Class对象:对象.getClass()Class<?> clazz1 = apple.getClass();类.classclazz2 = Fruit.class;Class.forName()clazz3 = Class.forName("com.test.demo.Fruit");创建使用Class对象的**newInstance()**方法创建类..
2021-05-30 12:25:20 202
原创 MYSQL索引与数据结构
MYSQL索引与数据结构索引简介索引是一种利用某种规则的数据结构与实际数据的关系加快数据查找的功能索引的创建/删除/查看--建表时创建CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); --建表后添加ALTER TABLE my_table ADD [UNIQUE] INDE
2021-05-30 12:07:12 247
转载 JAVA执行流程和内存模型
JAVA执行流程和内存模型执行流程java程序执行分两步第一步:java源码(.java文件)通过编译器(javac.exe)编译成JVM文件(.class文件)。第二部:将JVM文件通过java.exe执行,输出结果。java源文件–(javac.exe)–>JVM文件–(java.exe)–>结果。JVM至关重要,其向上屏蔽了操作系统,也是java跨平台的关键。编译和执行的三个重要机制java编译机制:分析和输入到符号表注解处理语义分析和生成class
2021-05-29 14:40:46 225
转载 java基础面试题部分
数据类型字符串String str = "i"与 String str = new String(“i”)内存分配不同,str=“i”,存于常量池,new是对象,存于堆。HashMap与HashTablehashmap去掉了hashtable的contains方法,但是加上了conrainsValue()和containsKey()方法。hashtable同步的,hashmap非同步的,效率上hashmap高。hashmap允许空键值对,hashtanle不允许。..
2021-04-25 17:07:10 106
原创 @Bean/@Component注解
@Bean/@Component相同点结果相同,都是为spring容器注册Bean,最后bean都会被添加到spring上下文中。不同点@Component(作用在类):[同Controller/Service/Respository]:表面一个类为组件类,告知spring为这个类创建bean;spring2.5提出,主要为了通过classpath scanning拜托xml文件定义bean。只有我们的springboot启动了组件扫描且包含了被注解的类时才有效。通过组件扫描,spr
2021-04-23 13:41:39 296
转载 JavaGuid基础册子
基本程序运行.java文件(源代码)–JDK中javac编译 .class 文件–JVM–二进制机器码文件JVM类加载器首先加载字节码,然后通过解释器逐行解释执行。后面引入JIT编译器,JIT运行时编译,JIT完成第一次编译后保存对应的机器码。JAVA是编译与解释共存的语言。泛型泛型是JDK1.5引入的新特性,本质是参数化类型,既操作的数据类型被指定为一个参数。java的泛型是伪泛型,因java在编译期间,所有的泛型信息都会被擦掉,这也就是通常说的类型擦除//泛型类..
2021-03-22 15:56:12 384
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人