
Java
文章平均质量分 83
nvd11
大龄程序员
展开
-
Junit 5 - 理解Mockito,提高UT 覆盖率
当我是1个3年初级程序员时, 我被面试者问到1个问题: 如何保证你的开发任务交付质量当我是1个7年开发组长时, 我被面试者问到另1个问题:如何保证你的团队的代码质量, 减少rework。又若干年后, 我才明白当年我的回答是多么的傻嗨, 什么理解业务, 勤沟通, 代码review流程都是废话。真正的核心是测试!足够的单元测试!当你的下属提交pr时,顺便把 一份coverage 达到80% 的Junit testing report 放上jira, 你还不信任他这次任务的代码质量吗?原创 2024-09-28 04:38:12 · 1084 阅读 · 0 评论 -
Java ETL - Apache Beam 简介
Apache Beam是一个用于大数据处理的开源统一编程模型。它允许用户编写一次代码,然后在多个批处理和流处理引擎上运行,如Apache Flink、Apache Spark和Google Cloud Dataflow等。Apache Beam提供了一种简单且高效的方式来实现数据处理管道,支持复杂的数据流转换和并行处理。通过Apache Beam,用户可以编写可移植且具有弹性的数据处理应用程序,从而更轻松地处理大规模数据集并实现高性能的数据处理。Apache Beam最初是由Google开发的。原创 2024-09-18 03:20:51 · 940 阅读 · 0 评论 -
springboot service如何动态读取外部配置文件
在项目中, 读取外部配置文件的需求很常见例如。原创 2024-08-26 04:06:27 · 1256 阅读 · 0 评论 -
利用SpringBoot Actuator 来构造/health /info 等监控接口
当我们用K8S 部署微服务时, 很多时候需要调用 service的/health 等状态接口, 已确定container的运行状态是否健康。而Spring boot Actuator 就是用来快速构造这些状态接口的工具。原创 2024-03-17 18:59:09 · 1610 阅读 · 0 评论 -
Java 启动参数 -- 和 -D写法的区别
当我们配置启动1个java 项目通常需要带一些参数例如 -Denv = uat , --spring.profiles.active=dev 这些那么用-D 和 – 的写法区别是什么?原创 2024-03-12 03:38:17 · 1002 阅读 · 1 评论 -
解决IDEA 不能正确识别系统环境变量的问题
本人laptop 上的是设置了GOOGLE_APPLICATION_CREDENTIALS 这个环境变量的, 正常java or python 的程序能基于这个环境变量使用 某个gcp service account 去访问GCP的资源。把Program 的值 从/usr/bin/idea 改成 bash -ic “/usr/bin/idea”,但是在我在IDEA 编写的dataflow job并不能识别这个环境变量。肯定是idea 启动时并没有引用.bashrc 的内容。找到idea 的item。原创 2023-12-27 00:18:31 · 1676 阅读 · 0 评论 -
Tomcat10 简单地enable Https
但是其实没有域名也可以在tomcat 中enable https的, 至于为什么, 当然是为了实现传输中的数据被加密了。首先是自己生成1个ssl证书, 当然这个证书是不被浏览器信任的, 但是这个是实现https的前提条件。找到下面的注释, 并反注释它, 填入生成key的路径和密码。通常来讲, 建站后要启用https 有下面3个步骤。3.为这域名购买SSL 证书 (还有其密码)还会问你若干关于证书的问题, 随便填就是。2.绑定域名和 服务器的外部IP地址。这个命令会让你输入你想要的密码。原创 2023-11-05 01:14:11 · 492 阅读 · 2 评论 -
java静态内部类介绍
当内部类不需要访问外部类的实例成员时,且希望内部类与外部类之间没有直接的绑定关系时,可以考虑使用静态内部类。例如,当内部类只是作为外部类的辅助类或工具类时,不需要直接访问外部类的实例状态,这时静态内部类更合适。当内部类需要访问外部类的实例成员,并且需要与外部类紧密关联时,可以考虑使用非静态内部类。非静态内部类可以直接访问外部类的所有成员,包括静态和非静态成员,可以方便地共享外部类的状态和行为。在许多情况下,内部类的选择更多地取决于代码组织和可读性的考虑,以及是否需要对外部类进行封装和隐藏。原创 2023-10-02 02:26:43 · 435 阅读 · 0 评论 -
Java 获得泛型类中的泛型类型 T.class
假如我们写了1个泛型类MyBase我想写1个getEClass 的方法, 获取泛型符号E的Class对象。直接用E.class E.getClass()都是不合法的, 因为E只是个符号, 没有被实例化。原创 2022-10-16 23:39:25 · 8675 阅读 · 2 评论 -
Java 在反射上使用泛型
Java 中 我们可以用类名.Calss or 对象名.getClass()去获得一个Class。而这个Class本身也是一个类,而且是1个泛型类。....所以在反射中, 我们也可以使用泛型的。这里只介绍两个常用的泛型类Class>原创 2022-10-16 20:51:38 · 1574 阅读 · 1 评论 -
java 泛型 - 类型通配符
例如对于类A , A1, B这3个类,有1个方法f(B b)定义在在其他类。则f(B b) 并不能传入参数B的对象, 即使A1是A的子类。也就是讲, 下面的写法是不能通过编译的> {private?item;. . .原创 2022-10-16 04:17:00 · 666 阅读 · 0 评论 -
Java 泛型进阶
class 类名 < 泛型标识, 泛型标识 . . > {private 泛型标识 变量名;} } }原创 2022-10-06 01:20:53 · 10566 阅读 · 0 评论 -
JDK8 集合 Stream 入门
参考:https://stackoverflow.com/questions/51047522/how-to-auto-increment-the-key-of-a-hashmap-using-collectors-and-stream-in-java-8。本文所说的stream 跟java IO 里的stream有点区别, 虽然都是流的意思, 但本文所写的stream 是指 JDK8 API的新成员(还有lambda 和 try-with-resource) , 它允许以生命的方式处理数据集合。原创 2022-10-04 00:29:56 · 837 阅读 · 0 评论 -
Java 构造函数里的一些坑- super() 和 this()
这时, 调用子类双参构造函数时, 父类的双参构造函数会被调用, 顺理成章,这例子主要用于下面的例子对比。这时就不能通过无参构造函数实例化子类了, 因为java发现子类已有1个构造函数, 不会自动从父类继承。这是调用子类无参构造和函数时,会调用父类无参构造方法, 无论有无声明super()而子类双参构造 函数是不会默认调用父类的双参构造函数的, 即使参数类型完全一样。这个很好理解, super() 就是在子类的构造函数里调用父类的构造函数。这时子类是自动继承父类的无参函数的, 可以被实例化…原创 2022-09-19 02:12:49 · 1426 阅读 · 3 评论 -
一些java笔试题解
this() 和 super() 不能同时出现在一个构造函数里面,因为this()必然会调用其它的构造函数,其它的构造函数必然也会有 super() 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。每个子类构造方法的第一条语句,都是隐含地调用 super()(調用supper() or this()),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。这不跟Set是1个无序集合矛盾, Set所谓的无序是指存放的元素在内存中的位置无序。原创 2022-09-18 02:46:22 · 9743 阅读 · 1 评论 -
JPA Audit and Envers
而使用ValidityAuditStrategy,在新增一条变更记录时,会更新上一条变更记录的REVEND,REVEND_TSTMP为当前的版本号以及变更时间。在一些数据敏感的项目, 特别是配置表, 我们需要记录每一次对表的甚至每个值的改动, 并把改动的数据存放到另一张表中。如果对Audit 的要求不高, 只需要在表中记录是谁创建的, 谁最后修改,创建时间和最后修改时间。下面来看是怎么实现的, 我们会用user service 作为例子.执行上面的都测试用例, 可以见到1个新的AUD表被创建。原创 2022-09-04 21:25:19 · 534 阅读 · 0 评论 -
Spring Data JPA 入门
JPA 全称 Java Persistence Api, 中文是java 持久化API。它是当今世界上最流行的ORM (Object-Relational Mapping)框架。当年我们都感觉传统的ORM框架hibernate 相当的难用和臃肿,特别多联表查询, 然后选择更轻量级和更直观的的Mybatise. 但其实Mybaise 并不是1个ORM框架, 它是拥抱sql的。对熟悉sql的开发人员更加友好。当微服务大行其道时, 业务细分下, 通常我们不会在服务中对数据库进行复制的sql查询。原创 2022-09-03 22:03:42 · 672 阅读 · 0 评论 -
Spring Cloud Gateway - GatewayFilter路由过滤器
本文会对Spring cloud Gateway 作更深入的应用解析。既然网关会对请求进行权限验证, 这一步就会在GatewayFilter里实现。原创 2022-08-31 00:35:30 · 365 阅读 · 0 评论 -
Spring Cloud Gateway 入门
很多时候, 有些微服务是不应该被外部(UI) 直接调用的,我们需要API gateway来拦截这些请求。原创 2022-08-30 21:36:09 · 361 阅读 · 0 评论 -
关于Junit的一些问题
如果使用Junit4, 两者都需要, 如果使用Junit5, 只使用@SpringBootTest就够了, 使用@RunWith反而会报错。@BeforeClass 会在单元测试类被执行时执行, for 1个class只会执行一次。@SpringBootTest 是spring framework 里的东西。org.junit.jupiter.api.Test 是Junit5 的。org.junit.Test 是Junit4.@RunWith 是Junit4的东西。@Before 会在每次测试方法前执行。.原创 2022-08-29 03:26:09 · 359 阅读 · 0 评论 -
Lambda 在集合中的应用
相对于构造匿名类or匿名函数, 其实lambda 在java8中, 大大加强了对数组操作的方便度。原创 2022-08-28 23:50:33 · 192 阅读 · 0 评论 -
Lambda 构造方法引用 -- 类名::new
注意, 由于Lombok 的@Data 注解, 这个类实际上已经实现了无参构造方法和重写了ToString()方法。这就涉及设计模式和编程思维了, 很多时候我们并不想把类暴露给下游的类。大家可以学习下面向接口编程的思想, 这里就不展开了。ExampleConstruct1 类。但是如果这个方法是某个类的构造函数。1个是无参的接口函数, 1个是有参的。至于为什么不直接调用类构造函数?介绍了Lambda的函数引用。使用接口函数把参数输入就ok。这里我们创建了两个接口。那么还有1个新的写法。.........原创 2022-08-28 20:31:46 · 582 阅读 · 0 评论 -
Lambda 函数引用
如果再用上面的Lambda写法可能不太合适因为重复代码太多。一旦函数体要被修改可能同时要修改多个地方。Java 的匿名类,Lamdba能让我们动态地创造一些我们想要的函数, 有利有弊。这时我们可以在别的类写1个公共函数来代替 Lambda 具体的函数体。下面的乘法类和 加法再平方类就是使用函数引用和静态 函数引用。Interface i = () -> 对象名::函数名。Interface i = () -> 类名::函数名。在一个项目中, 可能我们会多次动态构造同1个函数。如果该公共函数是静态函数。...原创 2022-08-28 02:11:24 · 289 阅读 · 0 评论 -
Java Lambda 进一步精简
本人并不孤立使用最精简的Lambda语法, 毕竟代码可读性会越来越低, 但是学习这些精简语法可以令你看得懂项目中Lambda高手写的代码。其实我们使用Lambda 语法动态创建一些接口的对象时, 相对于原来匿名类的写法已经精简了很多。而且如果这样代码是return开头的, 这个return 必修被省略, 否则不能省略大括号。但是如果一旦要精简代码参数类型, 在代码中所有参数的类型都要省略。其实上面的Lamba写法不是最简洁的, 还可以进一步精简。...原创 2022-08-28 01:23:55 · 212 阅读 · 0 评论 -
Springboot 利用CORS 解决跨域问题
什么是跨域首先我们先用springboot 建立1个简单的API, 它返回1个jsonpackage com.example.demo_api_cors.controller;import com.example.demo_api_cors.dto.ValueDto;import org.springframework.web.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.RequestMap原创 2021-10-17 00:14:42 · 773 阅读 · 1 评论 -
手动创建1个基于注解的springmvc项目
众所周知, SpringMvc有4个基本组件DispatcherServlet -> 中央调度器, 使用前端设计模式拦截所有的url请求HandlerMapping -> 分发不同的url到各个不同的controller处理HanlderAdapter -> 调用controller去处理url请求ViewReslover -> 处理视图(jsp页面)在基于xml配置的springmvc项目中,我们会将DispatcherServlet 配在WEB-INF/web.xml原创 2021-07-26 02:05:03 · 179 阅读 · 0 评论 -
手动创建1个基于xml配置的springmvc 项目(without Maven)
当然, 今时今日使用maven 和 springboot 去创建1个java web project会更加方便。但是手动搭建1个会加深我对springmvc的理解。Step1 打开eclipse 创建1个新的Dynamic web projectStep2 往project内的 WEB-INF/lib folder导入下列spring 的jar包大部分都能在 .m2 里的repository folder找到, 如果没有可以利用别的maven project下载。 commons-loggi原创 2021-07-25 17:39:35 · 225 阅读 · 0 评论 -
SpringMVC Controller 和 Servlet的关系
SpringMVC Controller 和 Servlet的关系SprilngMVC 是是基于servlet做web 开发的原创 2021-07-24 18:16:05 · 274 阅读 · 0 评论 -
JSTL 及 tablibs 的简单介绍和配置方法
JSTL 及 tablibs 的简单介绍和配置方法jstl 简介jstl 的全称就是jsp standard tag libraries, 就是jsp里的标准标签库。 引用jstl技术能在jsp种使用更加强大的标签(tag)。jstl 里包含多个标准库, 本文主要简单讲讲其中的核心标准库核心库主要封装的是一些基本的核心的业务逻辑。tablibs这个名称一看就知道, 就是指标签库的集合了。Sp原创 2016-05-15 22:08:25 · 1326 阅读 · 0 评论 -
HttpServlet类简介和简单用法
HttpServelet类简介和简单用法原创 2015-02-21 10:40:48 · 4182 阅读 · 1 评论 -
Servlet 生命周期介绍
在面试的时候.有时会被问到这个问题: 请描述一下Servlet的生命周期.其实面试官就是想问你1个Servlet何时被创建, 何时被调用等....本文就是详细解答这个问题的.原创 2015-02-11 00:59:34 · 1226 阅读 · 0 评论 -
WebServer 软件原理简介
一. B/S结构 和 C/S结构简介1.1 C/S结构所谓C/S 就是 Client - Server ,在Client端有个界面程序. User会通过这个Client端程序来读写 存放在Server端的数据.我们常用的需要联网桌面程序例如 邮件客户端ThurderBird, 聊天工具Pidgin都是C/S结构的.1.2 B/S结构而B原创 2015-01-21 23:06:21 · 2859 阅读 · 0 评论 -
Java 利用反射实现C#的委托
一, 观察者模式的缺点在之前的博文的介绍过观察者模式了.观察者模式可以让多个观察者同时观察1个被观察者.也就说被观察者可以1次过执行所有观察者的update()方法.再通俗d来讲, 就是多个观察者的Update()方法交给被观察者来执行了.观察者主要应用在Gui 界面的控件事件上, 例如按个按钮可以,令多个其他控件同时产生变化.但是观察者原创 2015-01-03 21:37:53 · 2696 阅读 · 0 评论 -
Java 多态的简单介绍.
作为面向对象三大知识点之一, 多态可以讲是相对最难理解那个. 本人在这里也是简单分析一下.原创 2014-01-22 15:19:49 · 1017 阅读 · 0 评论 -
代理模式(Proxy)简介
代理模式相对来讲比较简单和容易理解.一, 代理模式(Proxy)的定义教材里定义很简单:所谓代理模式, 就是为其他对象提供一种代理控制对这个对象的访问.上面出现了3个名词:1.其他对象2.一种代理3.这个对象实际上就是:这个对象 找了 一种代理来 避免其他对象的访问二, 代理模式的例子例如有个狐狸揍1个只狗, 给它原创 2014-12-14 15:40:14 · 1019 阅读 · 1 评论 -
Spring 通过工厂方法(Factory Method)来配置bean
Spring 通过工厂方法(Factory Method)来配置bean在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean.在第一种利用bean config file(spring xml)方式中, 还包括如下三小类反射模式工厂方法模式(本文重点)Factory Bean模式其中反射模式最常见, 我们需要在bean 配原创 2016-05-31 00:26:00 · 34911 阅读 · 3 评论 -
Spring autowire 自动装配简介
Spring autowire 自动装配简介注意本文与一般spring 标注@Autowire 无关如下例子定义了3个类 Dperson Dcar & Daddress 其中Dperson 要引用另外两个类Dpersonpackage com.home.autowire;public class Dperson { private String name; private Dcar原创 2016-05-19 23:36:31 · 703 阅读 · 0 评论 -
Spring 利用FactoryBean来配置Bean
Spring 利用FactoryBean来配置Bean在之前的 博文 已经介绍可以利用java反射机制 和 工厂方法(Factory Method)的方法来在bean config file里 配置beans本文简单介绍下第三种方法 FactoryBean。FactoryBean 用法可以与Factory Method有点类似,我们同样需要写1个工厂类, 只不过spring提供了1个叫做Factor原创 2016-06-04 13:41:31 · 1484 阅读 · 0 评论 -
Spring xml 配置使用外部config 文件
Spring xml 配置使用外部config 文件当使用Spring framework后, 我们一般会把db connection的信息写在spring的bean config xml里面。例如:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"原创 2016-05-22 16:48:26 · 2185 阅读 · 0 评论 -
Java 动态代理介绍及用法
Java 动态代理介绍及用法一,静态代理模式的特点在之前的文章中 java代理模式 已经介绍里java里的(静态)代理模式下面是上文静态代理类的例子:public class ProxyBear implements Hitable<Dog>{ private Hitable<Dog> f = null; public ProxyBear(){ if (n原创 2016-05-28 22:25:06 · 1223 阅读 · 0 评论