自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (3)
  • 收藏
  • 关注

原创 写给零基础入坑蓝桥杯的同学

以下为2020.1.9更新

2019-07-18 20:30:03 75381 108

原创 「小技巧」通过 ⌘ + C/V 上传文件到服务器

通过⌘ + C上传文件到服务器

2022-08-27 11:43:04 355 1

原创 Goland无法debug\地址解析出错\无法下一步操作

goland无法debug 报错日志:couldn't start listener: listen tcp: address 0:0:0:0:0:0:0:1:56648: too many colons in address

2022-06-23 12:00:51 2152 6

原创 Golang原生golang.org/x/net/websocket包跨域问题解决方法

Golang net/websocket跨域问题解决方案

2022-06-17 13:32:41 1814

转载 Golang中巧妙的错误处理

Go语言中会出现 满屏的 if err != nil 该怎么办Java中的错误处理Java 语言使用 try-catch-finally 通过使用异常的方式来处理错误,使用抛异常和抓异常的方式可以让我们的代码有这样一些好处。函数接口在 input(参数)和 output(返回值)以及错误处理的语义是比较清楚的正常逻辑的代码可以跟错误处理和资源清理的代码分开,提高了代码的可读性异常不能被忽略(如果要忽略也需要 catch 住,这是显式忽略)在面向对象的语言中(如 Java),异常是个对象,所.

2022-05-28 13:35:16 629

原创 Pflag、Viper、Cobra 核心功能介绍

1.如何构建应用框架一般来说构建应用框架包含3个部分:命令行参数解析配置文件解析应用的命令行框架:需要具备 Help 功能、需要能够解析命令行参数和配置文件、命令需要能够初始化业务代码,并最终启动业务进程上3个需求便涉及Pflag、Viper、Cobra的使用,并且这三个包也是相互联系滴2.命令行参数解析工具:Pflag虽然 Go 源码中提供了一个标准库 Flag 包,用来对命令行参数进行解析,但在大型项目中应用更广泛的是另外一个包:Pflag2.1 Pflag 包 Flag 定义

2022-05-21 20:12:12 1077

原创 日志记录的坑

日志框架众多,不同的类库可能会使用不同的日志框架,如何兼容是一个问题。配置复杂且容易出错。日志配置文件通常很复杂,因此有些开发同学会从其他项目或者网络上复制一份配置文件,但却不知道如何修改,甚至是胡乱修改,造成很多问题。比如,重复记录日志的问题、同步日志的性能问题、异步记录的错误配置问题。日志记录本身就有些误区,比如没考虑到日志内容获取的代价、胡乱使用日志级别等。1.SLF4J提供了统一的日志门面 API,即图中紫色部分,实现了中立的日志记录 API。用来把各种日志框架的 API 桥接到 S.

2022-01-20 10:28:32 532

原创 对于异常处理的注意事项

大多数业务应用都采用的三层架构:Controller 层负责信息收集、参数校验、转换服务层处理的数据适配前端,轻业务逻辑;Service 层负责核心业务逻辑,包括各种外部服务调用、访问数据库、缓存处理、消息处理等;Repository 层负责数据访问实现,一般没有业务逻辑1.捕获和处理异常不建议在框架层面进行异常的自动、统一处理,尤其不要随意捕获异常:Repository 层出现异常或许可以忽略,或许可以降级,或许需要转化为一个友好的异常。如果一律捕获异常仅记录日志,很可能业务逻辑已经出错

2022-01-19 10:07:57 997

原创 空指针问题常见场景

出现空指针的常见场景参数值是 Integer 等包装类型,使用时因为自动拆箱出现了空指针异常;字符串比较出现空指针异常;诸如 ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null,强行 put null 的 Key 或 Value 会出现空指针异常;A 对象包含了 B,在通过 A 对象的字段获得 B 之后,没有对字段判空就级联调用 B 的方法出现空指针异常;方法或远程服务返回的 List 不是空而是 null,没有进行判空就直接调用 List 的方法出现空指

2022-01-17 14:52:41 2523

原创 使用并发工具应该要多注意这些

1.ThreadLocal使用注意点private static final ThreadLocal<Integer> currentUser = ThreadLocal.withInitial(() -> null);@GetMapping("wrong")public Map wrong(@RequestParam("userId") Integer userId) { //设置用户信息之前先查询一次ThreadLocal中的用户信息 String befor

2022-01-07 10:58:56 4272

原创 Rest Template 常见错误

1.参数类型是 MultiValueMap@RestControllerpublic class HelloWorldController { @RequestMapping(path = "hi", method = RequestMethod.POST) public String hi(@RequestParam("para1") String para1, @RequestParam("para2") String para2){ return "hellowo

2022-01-07 10:50:36 868

原创 Spring 事务常见错误

Spring 在初始化时,会通过扫描拦截对事务的方法进行增强。如果目标方法存在事务,Spring 就会创建一个 Bean 对应的代理(Proxy)对象,并进行相关的事务处理操作。1.unchecked 异常与事务回滚新增学生实例:public class Student implements Serializable { private Integer id; private String realname; }}@Mapperpublic interface .

2022-01-07 10:45:18 838

原创 Spring Web 过滤器使用常见错误

1.@WebFilter 过滤器无法被自动注入为了统计接口耗时,可以实现一个过滤器如下@WebFilter@Slf4jpublic class TimeCostFilter implements Filter { public TimeCostFilter(){ System.out.println("construct"); } @Override public void doFilter(ServletRequest request, Servle

2022-01-06 15:47:14 818

原创 Spring Web 参数验证常见错误

1.对象参数校验失效import lombok.Data;import javax.validation.constraints.Size;@Datapublic class Student { @Size(max = 10) private String name; private short age;}@RestController@Slf4j@Validatedpublic class StudentController { @RequestMap

2022-01-06 15:43:30 543

原创 Spring Web Body 转化常见错误

1.变动地返回 Body//定义的数据对象@Data@NoArgsConstructor@AllArgsConstructorpublic class Student { private String name; private Integer age;}@RestControllerpublic class HelloController { @PostMapping("/hi2") public Student hi2(@RequestBody Stu

2022-01-06 15:40:23 327

原创 Spring Web Header 解析常见错误

URL 的长度有限,所能携带的信息也因此受到了制约,如果想提供更多的信息,Header 往往是不二之举例如 Content-Type 指定了我们的请求或者响应的内容类型,便于我们去做解码。1.接受 Header 使用错 Map 类型解析header的常见做法:@RequestMapping(path = "/hi", method = RequestMethod.GET)public String hi(@RequestHeader("myHeaderName") String name){.

2022-01-06 15:33:41 539

原创 SpringWeb URL解析常见错误

1.当 @PathVariable 遇到 /@RestController@Slf4jpublic class HelloWorldController { @RequestMapping(path = "/hi1/{name}", method = RequestMethod.GET) public String hello1(@PathVariable("name") String name){ return name; }; }以上使用@Pat

2022-01-06 15:12:43 621

原创 HttpServletResponse设置ContentType失效

现象:使用postman测试响应ContentType没有值这是我的部分代码:@Override public void download(Long buildingId, HttpServletResponse response) throws IOException { ...... IoUtil.write(response.getOutputStream(), true, bytes); response.setContentType(imag

2021-09-02 11:08:41 1241

原创 Java中的原子操作类

Java从JDK 1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式.Atomic包里的类基本都是使用Unsafe实现的包装类1.原子更新基本类型类AtomicBoolean:原子更新布尔类型。AtomicInteger:原子更新整型AtomicLong:原子更新长整型以AtomicInteger为例:int addAndGet(int delta):以原子方式将输入的数值与实例中的值(A

2021-07-13 15:37:04 250 1

原创 Java中的并发工具

1. 等待多线程完成CountDownLatch当子线程需要等到子线程执行完成才继续执行可以使用CountDownLatch:public class CountDownLatchTest { /** * 等待其他线程执行完成主线程再继续执行 CountDownLatch * c.countDown(); * c.await(); * * @throws InterruptedException 中断异常 */ @Test

2021-07-12 16:01:55 213 1

原创 Executor框架

0.Executor框架的结构Executor框架主要由3大部分组成如下:任务:包括被执行任务需要实现的接口:Runnable接口或Callable接口。任务的执行:包括任务执行机制的核心接口Executor,以及继承自Executor的 ExecutorService接口。Executor框架有两个关键类实现了ExecutorService接口 (ThreadPoolExecutor和ScheduledThreadPoolExecutor)。异步计算的结果。包括接口Future和实现Future

2021-07-12 14:42:10 206 3

原创 RESTful-API设计原则

REST 代表的是表现层状态转移(REpresentational State Transfer)它只是一种软件架构风格,是一组架构约束条件和原则,而不是技术框架。REST 规范把所有内容都视为资源,也就是说网络上一切皆资源。REST 架构对资源的操作包括获取、创建、修改和删除,这些操作正好对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法。1.URI规范资源名使用名词而不是动词,并且用名词复数表示。Collection:一堆资源的集合。例如我们系统里有很多用户(Us.

2021-06-23 10:23:50 508 1

原创 Java中的线程池

0.Java中的线程池在开放中合理的运用线程池可以带来以下好处降低资源损耗:减少线程不断销毁创建带来的开销提高响应速度:任务到达时即可立即执行提高了线程的可管理1.线程池的实现原理源码:java.util.concurrent.ThreadPoolExecutor#execute如果当前核心线程数未满,则使用创建一个核心线程来执行当前任务如果核心线程数满了,则将当前任务放入到一个阻塞队列中,核心线程将会执行队列中的任务如果队列满了,则继续创建一个线程(当前的线程数大于核心线程数,小于

2021-06-22 19:35:47 99

原创 Golang常用设计模式

单例模式// 使用once.Do可以确保 ins 实例全局只被创建一次,once.Do 函数还可以确保当同时有多个创建动作时,// 只有一个创建动作在被执行。type singleton03 struct {}var ins03 *singleton03var once sync.Oncefunc GetInsOr03() *singleton03 { once.Do(func() { ins03 = &singleton03{} }) return ins03}工

2021-06-22 15:17:59 2326

原创 Git如何规范填写Commit Message

0.规范commit message的好处可以清晰地知道每个 commit 的变更内容可以基于这些 Commit Message 进行过滤查找,比如只查找某个版本新增的功能:git log --oneline --grep “^feat | ^fix| ^perf"可以基于规范化的 Commit Message 生成 Change Log。可以依据某些类型的 Commit Message 触发构建或者发布流程,比如当 type 类型为 feat、fix 时我们才触发 CI 流程。确定语义化版本的

2021-06-20 15:08:38 1258

原创 值得拥有的百度搜索技巧

去广告搜索『intitle:(关键词)』限定文件类型『(关键词)filetype:(文件类型)』*常见文件类型:〔pdf〕PDF文件〔xls〕:excle文件〔ppt〕:powerpoint文件〔doc〕:word文件〔txt〕:文本文档.关键词包含在正文中『intext:(关键词)』限定搜索网站『(关键词)inurl:(网站类型)』*常见网站类型〔.com〕商业组织和公司。〔.net〕网络服务商。〔.gov〕政府部门。〔.org〕非营利性组织。..

2021-06-06 11:32:56 457

原创 适配器模式

它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作ITarget 表示要转化成的接口定义。Adaptee 是一组不兼容 ITarget 接口定义的接口,Adaptor 将 Adaptee 转化成一组符合 ITarget 接口定义的接口。适配器模式有两种实现方式:类适配器和对象适配器。// 类适配器: 基于继承public interface ITarget { void f1(); void f2(); void fc();}public c.

2021-05-23 18:32:12 58 1

原创 建造者模式

经典实现:创建一个资源池public class ResourcePoolConfig { private String name; private int maxTotal; private int maxIdle; private int minIdle; private ResourcePoolConfig(Builder builder) { this.name = builder.name; this.maxTotal = builder.maxTotal;

2021-05-23 13:17:06 52

原创 职责链模式

将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。经典实现方式一public abstract class Handler { protected Handler successor = null; public void setSuccessor(Handler successor) { this.successor = successor; } public final.

2021-05-15 17:32:10 70

原创 模板模式

模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。经典实现:public abstract class AbstractClass { public final void templateMethod() { //... method1(); //... method2(); //... } protected abstract void me.

2021-05-15 16:22:44 55

原创 观察者模式

观察者模式(Observer Design Pattern)也被称为发布订阅模式。在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。经典的实现方式:public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(Message message);}p.

2021-05-15 16:21:21 72

原创 策略模式

策略模式可以解耦策略的定义、创建、使用。1. 策略的定义策略类的定义比较简单,包含一个策略接口和一组实现这个接口的策略类。因为所有的策略类都实现相同的接口,所以,客户端代码基于接口而非实现编程,可以灵活地替换不同的策略。示例代码如下所示:public interface Strategy { void algorithmInterface();}public class ConcreteStrategyA implements Strategy { @Override publi.

2021-05-15 13:35:45 55

原创 Golang交换两个变量

// 使用第三变量交换a,b值func swap(a *int, b *int) { tem := *a *a = *b *b = tem return}// 使用第三变量交换a,b值:go 直接交换值func swapTwo(a *int, b *int) { *a, *b = *b, *a}// 不使用第三变量交换a,b值:直接返回func swapReturn(a int, b int) (int, int) { return b

2021-04-24 11:04:06 805

原创 新征程-Golang

2021-03-18 23:43:56 125 1

原创 类型转换「基础支持层」-MyBatis

JDBC数据类型与Java语言中的数据类型并不是完全对应的,所以在PreparedStatement为SQL绑定参数时,需要从Java类型转换成JDBC类型,从而结果集中获取数据时,则需要从JDBC类型转换成Java类型。MyBatis使用类型处理器完成上述两种转换MyBatis中使用JdbcType这个枚举类型代表JDBC中的数据类型,该枚举类型中定义了TYPE_CODE字段,记录了JDBC类型在java.sql.Types中相应的变量编码,并通过一个静态集合codeLoolup(Map类型)维护变量

2021-03-06 16:30:53 276

原创 反射工具箱「基础支持层」-MyBatis

MyBatis在进行参数处理、结果映射等操作的时候,会涉及大量的反射操作。java原生反射操作有些复杂且容易出错,MyBatis中提供了反射相关的工具类放在com.apache.ibatis.reflection包中。同时MyBatis中提供的测试用例也是非常值得一看的。1.Reflector&ReflectorFactory对JavaBean的定义:属性是通过getter/setter方法得到的,也就是说有属性A就会有getA(),setA(A)方法。Reflector是反射的基础,里面缓

2021-03-06 13:41:25 181

原创 解析器模块「基础支持层」-MyBatis

基础支持层中封装了一些通用独立的模块,给MyBatis提供了支持,也可以在合适的场景中使用。解析器模块主要用于对解析XML文件。目前XML解析创建的方式有三种:DOM:基于树形结构的XML解析方式,它会将整个XML文档读入内存并构建一个DOM树,基于这棵形结构对各个节点进行操作。SAX:基于事件模式的XML解析方式,只需将XML的一部分加载到内存当中。那XML作为一个事件流进行处理StAX:和XML解析方式类似,同时也可以同时解析多个文档,应用程序通过调用解析器推进解析的进程。1.XPath简介

2021-03-02 10:06:11 163

原创 日常开发效率神器【Hutool工具类】的使用

0.前言Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法。Hutool基本上覆盖了日常开发中涉及的所有工具方法。包括字符串操作、日期操作、Excel、HTTP客户端、JSON解析等等。强烈推荐大家使用。官方文档。接下来通过项目源码中的测试用例来学习和入门Hutool,看完测试用例你就会惊叹:牛掰!Gitee和GitHub上都有这个项目,这里使用Gitee,clone会快一点。GitHub clone慢的问题也可以通过Gitee导入GitHub项目的方式解决1

2021-02-28 01:04:00 3897

原创 MyBatis整体架构

《MyBatis技术内幕》笔记摘抄:MyBatis项目源码主要模块如下:1.整体架构图主要分为三层:基础支持层、核心处理层、接口层基础支持层:数据源模块、事物管理器模块、缓存模块、Binding模块、反射模块、类型转换、日志模块、资源加载、解析器模块核心处理层:配置解析、参数映射、SQL解析、SQL执行、结果映射、插件接口层:SqlSession点击查看原图2.基础支持层反射模块:对应 reflection包。Java 中的反射虽然功能强大,但对大多数开发人员来说,写出高质量

2021-02-26 15:32:17 314

原创 【Jenkins】一键部署码云SpringBoot项目到生产环境

0.前言  Jenkins简单来说,就是可以帮我们简化项目的部署工作,开发人员在开发完一个小模块,当把代码推送到远程库(码云,github),就会触发Jenkins,它就可以帮我们自动的去部署项目,有的时候开发环境和生产环境的配置文件不一样,如果不部署,可能会有不可预知的问题。使用Jenkins就帮我们解决了这个问题。1. 环境准备  这里就不说详细步骤了,列举一下都需要哪些东西。1.1)...

2019-11-28 10:50:22 707

尚硅谷 韩顺平 图解Java设计模.txt

尚硅谷 韩顺平 图解Java设计模,在尚硅谷公众号里面获取的,我估计他会7天失效,所以这里给大家备好了

2019-07-05

安卓实训 学生信息管理

这是我给舍友写的安卓实训的模板。适合上课没怎么听,实训案例零基础上手。是一个学生信息管理,当然你们也可以改成账户信息管理等等。如果你导入eclipse出错可能是版本不兼容等问题,可以试着把.settings文件夹删掉然后在刷新。这使用SQLite数据库进行储存文件的。里面包含了增删改查。方便零基础学习上手和更改。实训必备。

2019-06-25

adb文件

adb 配置环境变量 安卓手机usb调试 电脑cmd操作手机 adb具体功能参考百度

2018-01-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除