- 博客(37)
- 收藏
- 关注
原创 java如何抛出异常
1.什么时候抛出异常?如果你觉得某些”问题”解决不了了,那么你就可以抛出异常了。比如,你在写一个service,其中在写到某段代码处,你发现可能会产生问题,那么就请抛出异常吧,相信我,你此时抛出异常将是一个最佳时机2.抛出怎么样的异常? 异常的抛出不仅仅是throw掉或者catch掉,而也应该进行异常的业务逻辑的处理所以本身也可以看做if--else的这样的一种分支进行处理掉传统...
2019-02-27 21:12:22 5897
原创 线程中的wait()和Sleep()方法
/** * 线程间通信----也就是当达成某种条件的时候就开始二者之间调用, * 但是调用的话他们之间的关系是什么呢? * wait方法---线程挂起 * notify方法--线程唤醒 * sleep方法---线程休眠(相当于一个定时任务) */public class ThreadA implements Runnable { //锁对象 private Ob...
2019-02-27 18:02:29 438
原创 Java中的CAS操作(乐观锁和悲观锁的解释)
第一:独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁用到的机制就是CAS,Compare and Swap。第二:线程之间的通信: 由于java的CAS同时具有 volatile...
2019-02-27 17:33:05 774
原创 java链表
public static void main(String[] args) { Node root = new Node("火车头"); Node n1 = new Node("车厢A"); Node n2 = new Node("车厢B"); root.setNext(n1); n1.setNext(n2); ...
2019-02-27 17:27:40 85
原创 HashMap数据结构的理解(同时为什么会有HashCode())
HashMap底层是数组加链表的组合体,那链表是怎么来的呢?数组又是怎么来的呢? 首先HashMap的底层是一个数组结构,而数组中的每一项又是一个链表. 与其说是数组结构,不如说是容纳key的一个数组;比如put()方法来说:首先根据key的hashCode重新计算Hash值,根据hash值得到这个元素在数组中的位置,(数组下标),如果该位置上放的元素和添加的元素相同,那么就替换...
2019-02-27 16:04:39 217
原创 HashSet为什么确保了元素的唯一性
其实这个问题可以通过源码就是可以看到的,首先看HashSet的add方法,public boolean add(E e) { return map.put(e, PRESENT)==null;}调用add方法,内部调用的是HashMap,所以说:HashSet的底层是通过hashmap实现的,add的值作为map的key,因为map中的key必须是唯一的,这样就保证了Has...
2019-02-27 15:39:24 167
原创 jdk1.8操作的api
实际项目当中根据需要进行选择public class Jdk8Main { public static void main(String[] args) { List<Person> list = Lists.newArrayList( new Person("张1", 1, 1), new P...
2019-02-27 15:25:23 418
原创 集合排序和比较
HashMap<String, String> map = Maps.newHashMap();map.put("action", "action");map.put("demo", "demo");map.put("ass", "ass");//将map的key存入集合List<String> list = Lists.
2019-02-27 14:50:49 130
原创 java生成签名---微信签名
1.生成签名的几个步骤: 1.对传入的参数进行排序(字典排序) 2.拼接成url中:key=value的格式 3.签名钥匙key=?商户key 4.对上面的四个进行md5加密具体的详细见面的博客https://blog.csdn.net/xb12369/article/details/45716665微信公众平台支付接口调试工具https://pay...
2019-02-27 11:35:38 2703
原创 Java中的CAS操作
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile...
2019-02-26 17:19:32 116
原创 HashTable和ConcurrentHashMap
我们经常说他们是线程安全的,效率之间的比较问题,那么他们究竟是什么呢? 1.他们都是线程安全的. 因为每一个put和get方法都有synchronized方法,从而是线程安全的.2.效率问题: 这个与内部的实现机制有关系: 1.HashTable的每一个操作方法都有synchronized关键字,从而有锁的存在 2.ConcurrentHa...
2019-02-26 17:15:15 97
原创 Java8处理List的双层循环
Java处理List的双层循环程序员经常遇到,一般都是当两个List某个值满足某条件时候,进行相应的处理;1.list和map之间的相互转换;/** * 两个List对象当id相同的时候(注意是两个对象,而非两个集合) * @param husbands * @param wives */private static void test8(List<Husband>...
2019-02-26 17:04:36 19281 1
原创 Lambda 表达式有何用处?如何使用?(对多个if--else条件的判断)
Lambda 表达式有何用处?如何使用?从知乎上获取的一篇文章值得一看https://www.zhihu.com/question/20125256/answer/324121308
2019-02-26 16:40:16 12793
原创 git常用命令
1.git add .2.git commit -m "提交信息"3.git push4.git stash -------------->本地代码加入到缓存区,(本地改变了代码,从远程拉取代码时,用这个命令解决错误)5.git stash pop----->与git stash对应6.git log 7.git status8.git branch ...
2019-02-25 18:44:45 86
原创 Git 从 master 分支拉新分支开发
一、 切换到被copy的分支(master),并且从远端拉取最新版本$git checkout master$git pull二、从当前分支拉copy开发分支$git checkout -b devSwitched to a new branch 'dev'三、 把新建的分支push到远端$git push origin dev四、拉取远端分支$git pull...
2019-02-25 18:40:53 1702
原创 关于ThreadLocal的使用场景
直接上代码: package com.weigu.zjp.ThreadLocal;public class BaseSignatureRequest { private String device; public String getDevice() { return device; } public void setDevice(...
2019-02-24 22:00:12 628
原创 定时任务实现方式5-@Schedule
注意三个东西: 1.启动类上加: @EnableSchedule 2:方法上: 1.方法没有返回值 2.方法上加注解: @Component @@Cron表达式的加入...
2019-02-24 21:42:09 436
原创 定时任务实现方式4-Quartz
需要对Quartz的几个名词要清楚代表什么意思@Configuration public class QuartzConfig { @Bean public JobDetail quartzDetail(){ return JobBuilder.newJob(QuartzTest.class).withIdentity("QuartzTest").storeDurably().b...
2019-02-24 21:38:36 174
原创 定时任务实现方式3-ScheduledExecutorService
package com.weigu.zjp.schedule;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;/** * ScheduledExecutorService,是基于线程池设计的定时任务类, * 每个调度任务都会分配到线程池中的一个线程去执行, * 也就是说,任务是...
2019-02-24 21:36:56 164
原创 定时任务实现方式2-Thread
package com.weigu.zjp.schedule;/** * 用线程可以设定休眠时间的方式可以实现简单的定时任务逻辑。 */ public class Threads { public static void main(String[] args) { // 定时任务时间间隔 int sleepTime = 2 * 1000;...
2019-02-24 21:36:21 569
原创 定时任务实现方式1-Timer
package com.weigu.zjp.schedule;import java.util.TimerTask;/** * Timer类允许调度一个TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行 */public class Timer { public static void main(String[] args) { int ...
2019-02-24 21:35:44 168
原创 Spring aop实现日志的打印
package com.xiaochuang;import com.google.gson.Gson;import org.apache.http.protocol.RequestContent;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspect...
2019-02-23 12:13:40 2746
原创 list和map之间转换的三种方式
list和map之间的相互转换可以说是代码的一种优化的方式,这种优化的方式可以避免大量的for循环,从而提高代码的效率: 1.代码的可读性更强 2.优化代码本来想写的,看到了大量的博客,其实是一回事,所以就https://blog.csdn.net/linsongbin1/article/details/79801952...
2019-02-22 10:50:49 5673
原创 异步,流量,线程的区别
异步:说白了从程序员的角度来讲:就是提高程序的执行效率;从用户的角度分析:就是用户的体验效果更加的好,那就是说:这个程序这么大的数据量,体验真棒从代码的层面讲:一个main方法可以执行更多的任务.比如: 1.异步发送短信 2.异步发送邮件 这些的效果都不会影响程序,那就是可以通过定时任务的方式实现, 实现异步的方式: 1.mq, ...
2019-02-21 17:30:32 308
原创 关于继承关系的认识
1.继承可以解决冗余代码的问题 2.继承的关系存在,那么类的属性赋值是怎么样的一个过程;3.继承关系中符号问号;?关于以上三个问题: 类在数据体现形式上的划分 1.DO,2.VO,3.DTO,pojo,BO 2.枚举类 3.常量类 4.异常类也就是说将公共的类应该提取出来进行公用性的处理 这个根据平时项目中...
2019-02-21 17:23:26 348
原创 面试当中当有人问你hashmap是怎么用的?
1.其实key和value满足一对一和一对多的关系的话,都是可以适用的,而这个一对一和一对多的关系其实就是数据库中表与表之间的一对一或者一对多的关系的体现2.通过HashMap进行和mybatis数据关系的隐射3.线程不安全变为线程安全.以上就是项目当中实际的应用...
2019-02-20 15:36:46 155
原创 filter和servlet的区别
网上看到了很多关于他们之间的比较.但根据自己的总结: 1.filter其实就是对流程和权限的控制 比如:SpringCloud中的zuul就是很好的例子,token实现拦截也是一个例子,2.servlet本身是对程序业务逻辑的处理:所以他们的先后顺序就是: 先有filter然后有servlet他们本身都是实现各自的filter和servlet接口,并实现其中的方法...
2019-02-18 15:37:22 1073
原创 一套完整的demo模板
===============================异常模板====================================public class ErrorCodeException extends IllegalArgumentException { /** * 错误码 */ private ErrorCodes errorCode...
2019-02-17 18:13:09 1880
原创 构造函数的作用
1.简单一句话:构造函数可以做很多的事情,最为重要的是创建对象.对象的初始化,但是在对象的初始化的时候,要对对象的属性进行判断,这个判断可以是代码的可读性更加的强;String content;String imagePath;public ImageText(String imagePath, String content) { super(TYPE_IMAGE_TEXT);...
2019-02-17 18:08:35 2925
原创 项目出现多个if--else分支的原因....怎么样提高代码的可读性
代码多分支的原因:空值判断业务判断状态判断1.对方法的入参进行非空判断2.对方法的返回值进行判断3.并且必须打印对应的日志;解决上面的问题:1.接口分层所谓接口分层指的是:把接口分为外部和内部接口,所有空值判断放在外部接口完成,只处理一次;而内部接口传入的变量由外部接口保证不为空,从而减少空值判断。方法二:多态利用多态,每种业务单独处理,在接口不再做任何...
2019-02-17 18:03:02 385
转载 docker部署项目
https://blog.csdn.net/jiangyu1013/article/details/81988342#comments
2019-02-17 11:51:09 121
原创 redisUtil
/** * Alipay.com Inc. * Copyright (c) 2004-2018 All Rights Reserved. */package com.weigu.serviceimpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.da...
2019-02-16 12:54:46 244
原创 常见的解决异步问题的方法以及使用的场景并且需要注意的问题
https://blog.csdn.net/tuoni123/article/details/79687318https://blog.csdn.net/tuoni123/article/details/79687318 多个之间的比较很好
2019-02-16 12:49:36 964
原创 异步编程
什么是异步?其实重点还是明白异步的过程,在什么情况下使用以及使用异步的好处是什么?https://blog.csdn.net/u012129558/article/details/78962759这个博客介绍了基本的概念以及怎么使用的Demo ...
2019-02-16 12:05:46 79
原创 IO多路复用进行异步化的处理
有异步的目的是:避免系统的蹦溃... 提高系统的吞吐的能力,线程池也是处理异步问题的一个方法线程马上释放,也不会阻塞异步:就是不同的线程,同一个线程不会阻塞.https://www.cnblogs.com/cjsblog/p/9267163.html...
2019-02-15 16:20:44 122
原创 为什么要用微服务架构?
一下三点: 1.项目版本管理:2.模块使用的频率:3.业务分配流程即:修改某个api就可以....而不用修改整个大的模块也就是局部产生的问题,不会影响到全局的工程问题,耦合性太高,架构师设计好,对应的去开发,可能会有很多的耦合性,特别是强耦合性,怎么解决这些强耦合性: 1.业务模块之间通信:通过消息队列解决,activemq,kafka等等 2.互相调用api...
2019-02-15 15:34:21 309
原创 linklist可以用for循环遍历吗?
建议:能不用尽量不用,因为底层是链表,它使用for循环进行遍历,访问每一个元素都是从头开始访问,然后直到找到这个元素,比如:找第三个节点:需要找到第一个节点,然后找到第二个节点,然后才是第四个节点,不是从第三个节点开始的,所以非常慢,可以使用迭代器进行遍历;arrayList可以使用for循环进行遍历;;这个是根据实际项目的效果得出来的.......
2019-02-15 15:00:24 1611
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人