随笔分类 - java
SpringBoot自定义starter-统一上传服务
摘要:为什么要用starter 在日常的开发中,许多功能都是重复的,比如上传,权限认证,redis的一些操作等。如果采用模块的方式在每一个项目中都加载这些模块,会导致项目比较大,且结构不清晰。 如果采用了starter就可以简便很多,在开发中,只需要从仓库依赖需要的jar即可。 背景 前两天,国内的码云抽
使用Redis锁可能出现的问题
摘要:分布式锁 分布式锁常规情况下都是使用redis来实现。很早以前,使用SETNX加过期命令进行设置,无法保证原子性。但随着时代的发展,redis已经支持一条指令(set指令)实现setnx加过期时间。 什么是线程不安全? 线程不安全指的是多个线程操作一个资源,期望值和获取到的数据不一致。 可能存在的问
自定义注解实现接口限流
摘要:自定义注解实现接口限流 场景:限制验证码在单位时间内的访问次数 实现流程:自定义一个注解,注解内包含访问的次数与单位时间。通过AOP进行切面拦截,获取注解内的次数和时间,获取请求的uri与访问者ip。组成redis的key。 使用redis将key进行原子性自增1.如果返回的是1.则设置过期时间,之
Java并发-2
摘要:Synchronized保证三大特性 原子性 对num增加同步代码块后,保证同一时间只有一个线程操作num。就保证了不会出现问题。 可见性 synchronied对应lock原子操作会刷新工作内存中共享变量的值 有序性 加入synchronied依然会发生指令重排,只不过我们有同步代码块,可以保证只
Java并发-1
摘要:进程 进程是操作系统进行资源资源分配的单位,进程中包含若干线程 线程 线程是CPU进行调度和执行的基本单位 方法区 堆 虚拟机栈 本地方法栈 程序计数器 每个线程拥有自己的栈和PC 多个线程共享方法去和堆 并行和并发 并行 单位时间内,任务同时执行 并发 在一定时间内,任务都执行了 并行是一起执行。
社区项目Redis分布式锁-穿透-击穿-雪崩
摘要:项目利用使用到了redis,比如会出现穿透、击穿、雪崩等问题。 穿透 缓存种不存在,数据库种也不存在,导致每一次的请求都会到数据库层面。 解决方案:缓存空对象,或者使用布隆过滤器 击穿 某个key在有大量的请求,但是大量请求到的时候,过期了,然后导致大量请求都到数据库层面 解决方案:数据不过期或者使
社区项目遇到的问题
摘要:集成es搜索引擎,实现高亮搜索,在测试中,发现如果用户输入的是html标签,会把html标签搜索出来且显示,导致格式错乱。解决方案:es中,不存入html标签内容。存入前,将html标签进行去除。 集成quartz定时框架,定时刷新帖子分数,开发的时候设置的定时间隔较短。正式部署到服务器上,发现定时
JVM之类加载器子系统
摘要:类加载器子系统 作用 负责从文件系统或网络系统中加载class文件,class文件在开头有特殊的标记(魔术开头CA FE BA BE) ClassLoader只负责加载class文件,至于能否运行,由执行引擎决定 加载的类的信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常
自定义注解实现Execl的导入导出
摘要:自定义注解实现Execl导入导出 悲伤,我是Java开发程序员,竟然被说是做运维的了。我是开发开发开发!!!! 写个笔记,记录一下以前的execl导入导出功能代码 pom坐标 此处使用常规版本3.9,未使用4.0版本,原因部分API已删除或过时 <dependency> <groupId>org.a
方法的参数传递机制
摘要:方法的参数传递机制 实参给形参赋值: 形参是基本数据类型 传递数据值 实参是引用数据类型 传递地址值(形参是实参的引用拷贝) 特殊的类型:String、包装类等对象不可变性 前置知识 每一个方法对应一个方法栈对应一个局部变量表 Integer常量池范围-127到128,超过整个范围将会重写生成一个对
类初始化和实例化过程
摘要:类初始化和实例化过程 类初始化过程 1、一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 2、一个子类要初始化需要先初始化父类 3、一个类初始化就是执行clinit()方法 clinit每个类都有,自动生成 中文名类初始化方法 clinit方法由静态类变量显
单例模式的常见写法
摘要:单例模式 概念:某个类在整个系统中只能有一个实例对象,并且是自己创建的唯一实例,构造方法私有化。 饿汉式:直接创建对象,不存在线程安全问题 直接实例化饿汉式(简洁直观) 枚举式(最简洁) 静态代码块饿汉式(适合复杂实例化) 懒汉式:延迟创建对象 线程不安全(适用于单线程) 线程安全(适用于多线程)
WebService的简单Demo
摘要:看到招聘要求要会WebService。就百度看看是如何实现的。 测试了一下。发现使用webservice开发方法,好像方便了不少。服务端开发者只需要关注服务端就可以了。 Demo结构 IWebService 接口 WebServiceImpl 实现类 WebServicePush 测试发布类 pac
java连接mongodb数据库
摘要:最近毕设需要用到这个数据库。然而又不会,没办法,只能上网学习学习。 记录一下java连接mongodb数据库的简单方法。这里只是记录一下学习。熟悉一下CURD方法。 但是毕业用到的是SpringBoot来整合mongodb数据库。似乎用SpringBoot来操作mongodb更简单。 如果是Spri
MongoDb笔记
摘要:show dbs; //显示所有数据库 use chaoba; //进入chaoba数据库 db.createCollection("chaoba1"); 创建集合 show collections();查看集合 show tables db.chaoba1.save({“name”:“1233”}
java字符统计+字符串压缩
摘要:要实习了。突然发现自己好像什么都不会,就去看看题吧。在网上看到一个字符串压缩的题。看了一眼,感觉用python很简单。一个for循环+字典就可以搞定。 但是呢,主要还是java。下面就用java来实现一下。未检测长度是否小于10000 题目: 利用字符重复出现的次数,编写一个方法,实现基本的字符串压
HADOOP单机版配置
摘要:1.需要软件 jdk hadoop 将jdk和hadoop解压到自己想要存放的路径 这里我解压到/usr/目录下 sudo tar -zxvf java1.8.tar.gz -C /usr/ hadoop同理 然后赋予777权限 和使文件所属改为当前用户 sudo chmod -R 777 hado
java图像开发学习——JTable之导入数据库
摘要:package demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import ja
JTable写入数据库内容
摘要:/*JTable中导入数据库数据。 创建2个Vector col和dat col存入字段名 dat存入数据内容。 dbname=new JTable(dat,col); */package demo; import java.awt.*; import javax.swing.*; import j