
java
91奔跑的蜗牛
这个作者很懒,什么都没留下…
展开
-
CAP理论
之前有找过一些关于CAP理论的文章,今天偶然看到下面对于CAP理论的描述,个人觉得还是写的比较简单易懂的,所以摘录下来分享。什么是 CAP 理论呢?这是 2000 年University of California, Berkeley 的计算机教授Eric Brewer(也是谷歌基础设施 VP)提出的理论。所谓 CAP,是以下 3 个单词的首字母缩写,它们都是分布式系统最核心的特性:Consistency 一致性Availability 可用性Partition tolerance 分区容错原创 2021-02-23 15:47:28 · 430 阅读 · 0 评论 -
策略模式 与 上下文context的作用
用户多种会员的价格优惠不一样,正常的代码实现 if public static BigDecimal calPrice(BigDecimal orderPrice,String buyerType){ if("svip".equals(buyerType)){ if(orderPrice.compareTo(BigDecimal.valueOf(28))>0){ return orderPrice.multiply(原创 2021-01-07 21:17:43 · 2600 阅读 · 4 评论 -
@Async 造成代码中用户信息与登录用户不一致的问题
场景:消息通知会发送给自己,微信公众号上的通知,提醒人与操作人不符合思路:@Async 异步执行的时候,因为不在与主线程不是同一个线程所以,UserUtil.getCurrentUser()丢失当前用户信息,重新设置了用户上下文信息,以此为出发点排查。1、首先在调用@Async方法的地方打上断点2、在@Async执行的方法打上断点3、设置 @Async 的核心线程池数量为1,这样保证多个请求执行的时候,@Async的线程都一样的threadPoolTa...原创 2021-01-06 13:43:13 · 2097 阅读 · 3 评论 -
java 枚举
public enum MyEnum { //FIRST、SECOND对应 MyEnum(String code,String message) 构造方法 //THREE 对应 MyEnum() 构造方法 FIRST("1001","错误消息"), SECOND("1002","成功消息"), THREE; // code 和 message 提供 get方法 //FIRST.getCode()+":"+FIRST.getMessages() .原创 2020-08-14 18:08:48 · 178 阅读 · 0 评论 -
java 多线程, 在一个方法中启用一个新线程调用其他方法
public class MyTest { public static void main(String[] args) throws Exception { String result = method(); System.out.println("main方法调用method,得到了结果"+result+":"+new Date().toLocaleString()); } public static String method(){.原创 2020-06-02 15:31:17 · 7221 阅读 · 1 评论 -
循环执行数据,出现异常跳过,继续执行下一条
场景:循环输出1-10,当i=5的时候出现异常,此时想让程序继续执行。catch 里面记录错误日志,continue继续执行for循环。 public static void main(String[] args) throws Exception { try { for(int i=0;i<=10;i++){ try { if(i==5){ .原创 2020-05-22 17:25:43 · 5575 阅读 · 1 评论 -
java 多线程 Future.get()会阻塞当前主线程的运行,但不影响已经执行的其他线程
public class MyTest { public static void main(String[] args) throws Exception { ExecutorService pool = Executors.newFixedThreadPool(2); Future<Integer> f1 = pool.submit(new MyCallable(100)); Future<Integer> f2 = .原创 2020-05-21 14:53:24 · 5789 阅读 · 0 评论 -
ObjectMapper 解析 json
问题描述,在使用ObjectMapper解析json数据的时候,json数据太多,只想解析需要的数据生成pojo对象。解析的Class为Map, 可以先使用Object.class ,调试之后发现是 linkedHashMap类型。 Map map = objectMapper.readValue(json, Map.class); Object emp ...原创 2020-04-14 22:53:49 · 1577 阅读 · 0 评论 -
java 多线程 CountDownLatch
CountDownLatch能够实现线程之间的等待,CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行public class MyTest { public static void main(String[] args) { CountDownLatch count = new CountDownLatch(2); ...原创 2020-03-25 13:31:28 · 166 阅读 · 0 评论 -
java 多线程 volatile
volatile是轻量级的synchronized,它在多线程中保证了变量的“可见性”。可见性的意思是当一个线程修改了一个变量的值后,另外的线程能够读取到这个变量修改后的值。看下如果不加 volatile 的情况:public class MyTest { public static void main(String[] args) { Volatile ru...原创 2020-03-25 13:17:03 · 140 阅读 · 0 评论 -
java 多线程, 线程池的使用
需求,有一段程序希望后台能有3个线程一起执行,提高效率。public class MyTest { public static void main(String[] args) throws Exception{ ExecutorService executorService = Executors.newFixedThreadPool(3); ...原创 2020-03-12 19:52:13 · 148 阅读 · 0 评论 -
java 多线程 join
t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。当t执行完后才会执行其他未start的线程,使得线程之间的并行执行变成串行执行。public class MyTest { public static void main(String[] args) throws Exception{ Thr...原创 2020-03-12 10:44:48 · 133 阅读 · 0 评论 -
java 多线程 死锁问题
public class MyTest { public static void main(String[] args) { Print3 print = new Print3(); new Thread(){ public void run() { for(int i=1;i<=100...原创 2020-03-11 13:09:17 · 190 阅读 · 0 评论 -
上机笔试题目:取出指定条件二维数组的子数组
取出指定条件二维数组的子数组:1)传入参数为:参数一:String[][]sArray2字符串二维数组参数二:Stringkey字符串参数三:StringkeyFormat含匹配符的字符串,如下:%0-%1,其中%x含义如为:一维数据列序号为x的值。 keyFormat 可以为 %0-%1-%2,%0-%3-%8-%x......例子如下...原创 2020-03-05 09:57:51 · 520 阅读 · 0 评论 -
java String 是否空值判断
如下代码,判断一个String是否有值,当String 为 null 的时候,得到结果是错误的,因为此时 !"".equals(null)得到的结果是 true public static void main(String[] args) { String str = null; System.out.println(str != null || !""...原创 2020-02-24 10:24:03 · 683 阅读 · 0 评论 -
try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
public class C { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.ou...原创 2020-01-07 21:28:03 · 756 阅读 · 0 评论 -
java 设计模式 6大原则
里氏置换原则 (不要破坏继承关系)所有引用基类的地方必须能够透明的使用其子类对象。也就是说,只要父类出现的地方子类就能够出现,而且替换为子类不会产生任何错误或异常。但是反过来,子类出现的地方,替换为父类就可能出现问题了。1、子类必须完全实现父类的方法。例如,A类方法入参为父类,具体实现时候入参可为子类。2、子类可以自己的特性。也就是说在类的子类上,可以定义其他的方法或属性。3、重载或...原创 2020-01-03 11:35:44 · 107 阅读 · 0 评论 -
java 多线程实现的两种方式
多线程实现的两种方式1、继承Thread,运行start方法2、实现runnable接口,好处:因为java是单继承多实现,如果继承了Thread就不能继承其他类进行扩展了。两种方式都需要借助Thread类,调用start方法,jvm会自动调用其run方法,如果直接执行run方法,则不是多线程。...原创 2019-12-31 16:58:17 · 179 阅读 · 0 评论 -
JsonUtils 封装 com.fasterxml.jackson.databind.ObjectMapper
public class JsonUtils { // 定义jackson对象 private static final ObjectMapper MAPPER = new ObjectMapper(); /** * 将对象转换成json字符串。 * <p>Title: pojoToJson</p> * <p...原创 2019-12-10 16:51:53 · 426 阅读 · 0 评论 -
Spring 使用xml注入和注解注入
使用xml注入属性值的时候,该属性必须要有set方法。使用注解注入属性值的时候,该属性可以没有set方法。为什么注解@Autowired注入属性的时候,可以没有set方法呢?既然是注解,那么肯定有对注解@Autowired的解析。触发解析:Spring容器在每个Bean实例化之后,调用AutowiredAnnotationBeanPostProcessor的postProcessMer...原创 2019-11-21 23:29:55 · 710 阅读 · 0 评论 -
java PropertyDescriptor获取属性对应的get和set方法
public static void main(String[] args) throws Exception { Class clazz = User.class; Field[] fields = clazz.getDeclaredFields(); for(Field field : fields){ PropertyDescriptor p = new Pro...原创 2019-11-19 15:33:46 · 1593 阅读 · 0 评论 -
java pdf转图片
题外话,maven搭建工程的时候,pom导入pdfbox包的时候,报错Missing artifact org.apache.pdfbox:pdfbox:bundle:2.0.1这边可选的pdfbox两个版本是根据本地仓库的配置,如果想添加新的版本,只有去maven官网https://mvnrepository.com/,找到相对应的pdfbox<dependency>,添加到...原创 2019-11-15 11:23:45 · 413 阅读 · 0 评论 -
java String类型的数据与基本数据类型作比较,Long类型的比较
String类型的数据与基本数据类型用euqals方法作比较时候,返回的都是false;基本类型long,用==直接比较内容大小包装类型Long,自动装箱的时候调用Long.valueOf()方法,将long转成Long,如果是-128到127的范围内,取缓存。 public static void main(String[] args) throws Exception { ...原创 2019-11-14 10:18:27 · 2534 阅读 · 0 评论 -
动态代理解决全站乱码问题
思路:Proxy动态代理对HttpServletRequest的getParameter方法进行增强,FIlter过滤器在放行的时候,传递的是代理对象HttpServletRequest。 @Override public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) t...原创 2019-11-06 22:57:21 · 241 阅读 · 0 评论 -
java split()匹配正则表达式
在使用split()的时候,如果要进行分割的符号为特殊符号,则要加上"\\"进行转义,否则会出现意想不到的错误。特殊符号如: * | .public class Test001 { public static void main(String[] args) throws Exception { String str = "zhangsan|12345"; St...原创 2019-11-04 22:27:24 · 1683 阅读 · 0 评论 -
接口回调
需求:A在执行循环,当循环到5的时候, 通知B。事先先把一个对象传递给 A , 当A 执行到5的时候,通过这个对象,来调用B中的方法。 但是注意,不是直接传递B的实例,而是传递一个接口的实例过去。接口类:public interface PrintListenner { public void print(); }A:public class A { publi...原创 2019-11-03 21:56:42 · 222 阅读 · 0 评论 -
java File统计文件夹大小和删除文件
注意:File.length()只能用于计算文件大小,不能用于统计文件夹大小。 /**统计文件大小 * @param file * @return */ public static long getFileLength(File file) { if(file.isFile()){ return file.length(); } long len...原创 2019-10-24 20:56:10 · 570 阅读 · 0 评论 -
java 多线程 四个窗口卖100张票,遇到的一些问题
问题一:启用了四个线程,但是只有一个窗口在卖票。public class IOTest { public static void main(String[] args) { TicketSell t1 = new TicketSell(); TicketSell t2 = new TicketSell(); TicketSell t3 = new TicketSell(...原创 2019-10-24 17:57:53 · 2716 阅读 · 0 评论 -
java 内存输出流ByteArrayOutputStream
* 1.什么是内存输出流 * 该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据* 2.使用方式 * 创建对象: new ByteArrayOutputStream() * 写入数据到 ByteArrayOutputStream: write(int), write(byte[]) * 获取数据: toByteArray()...原创 2019-10-24 16:13:22 · 2391 阅读 · 1 评论 -
java 文本拷贝
public class Test001 { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new FileReader("F:\\text\\note.txt")); BufferedWriter bw = new Buffered...原创 2019-10-23 17:09:43 · 148 阅读 · 0 评论 -
java 图片加密
首先,了解下异或操作 ^ ,对一个数进行两次异或操作得到原数值。public class IOTest { public static void main(String[] args) { int i = 3; System.out.println(i^123);//120 System.out.println(i^123^123);//3 }}将一张图片进...原创 2019-10-23 16:14:51 · 2572 阅读 · 0 评论 -
java 使用文件过滤器筛选将指定文件夹下的大于50K的文件,并打印!
public class Test001 { public static void main(String[] args) throws Exception { File file = new File("F:\\Picture"); System.out.println(file.length());//4096 这边的长度跟硬盘上的不一致 File file2 =...原创 2019-10-23 10:32:04 · 815 阅读 · 0 评论 -
java Collection总结
/** * Collection * List(存取有序,有索引,可以重复) * ArrayList * 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢 * LinkedList * 底层是链表实现的,...原创 2019-10-22 16:08:50 · 100 阅读 · 0 评论 -
在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复
public class Test4 { /** * 在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复 * * 分析: * 1,定义一个List集合,并存储重复的无序的字符串 * 2,定义方法对其排序保留重复 * 3,打印List集合 */ public static void main(String[] args...原创 2019-10-22 15:37:52 · 321 阅读 · 0 评论 -
java 将集合中的重复元素去掉
通过LinkedHashSet有序唯一的特性Collection接口addAll方法,可以将List添加到Setpublic class Test001 { public static void main(String[] args) throws Exception { ArrayList<String> list = new ArrayList<&...原创 2019-10-22 15:34:25 · 179 阅读 · 0 评论 -
java List中添加基本数据类型,会将其自动装箱成包装类
public class Test001 { public static void main(String[] args) throws Exception { List list = new ArrayList(); list.add(111); list.add(222); list.add(333); list.remove(111);//删除的时...原创 2019-10-22 15:12:32 · 1051 阅读 · 0 评论 -
java Collection retainAll 取两个集合的交集
public class Test001 { public static void main(String[] args) throws Exception { Collection c1 = new ArrayList(); c1.add("a"); c1.add("b"); c1.add("c"); c1.add("d"); Collection...原创 2019-10-22 14:41:40 · 883 阅读 · 0 评论 -
java byte的一些运算注意点
public class Test001 { public static void main(String[] args) throws Exception { byte b1 = 3; byte b2 = 4; byte b3 ; //报错:Type mismatch: cannot convert from int to byte //jvm 对于整...原创 2019-10-22 10:35:48 · 171 阅读 · 0 评论 -
java TreeSet原理
TreeSet如何保证元素唯一?当compareTo方法返回0的时候集合中只有一个元素Person类如下:public class Person { private String name; private Integer age; public Person() { } public Person(String name, Integer age) { sup...原创 2019-10-21 17:24:15 · 320 阅读 · 0 评论 -
java List的contains和remove方法,底层依赖的的对象的equals
实例:新建一个Person类,像List中添加Person,进行contains和remove方法的测试。Person类: name和age两个属性,但是没有重写equals方法public class Person { private String name; private Integer age; public Person(){ } public P...原创 2019-10-21 14:49:08 · 540 阅读 · 0 评论