Java EE

JAVA奇技淫巧简化代码之lombok

自作多情 提交于 2020-11-01 00:27:23
背景 最近在做一个小功能,又不想在原有体态臃肿的项目中追加,为了调试方便并且可以快速开发就采用了springboot。由于使用了JPA,建了几个类,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,那么Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,想着前几天听说有一款简化神奇Lombok,特此拿来玩玩记录一下。 简介 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。 官方地址: https://projectlombok.org/ github地址: https://github.com/rzwitserloot/lombok Lombok注解 下面对Lombok的简单使用方法做一下总结: @NotNull 作用在方法参数上的注解,用于自动生成空值参数检查。 @Cleanup 作用在局部变量上,在作用域结束时会自动调用close方法释放资源。 @Getter 作用在字段上,会自动生成字段的Getter;作用在类上,会自动生成该类所有非静态字段的Getter,还能控制Getter的访问级别 @Setter 基本同上。 @ToString 类注解,自动生成类的toString方法,可以做一些定制

要去面试,先刷完这16道高频面试题,阿里,字节跳动,美团任你选

╄→гoц情女王★ 提交于 2020-10-31 07:29:48
1.JDK8 新特性 Lambda 表达式-也是函数编程的一种方式(将函数做为参数) 方法的应用,应用已有的java类对象的方法或者构造器。与Lambda表达式相结合,方法应用使得语言构造更加简洁,从而减少代码的冗余 默认方法,默认方法就是一个在接口里边有了一个实现的方法 新工具-新的编译工具,如:Nashorn引擎jjs,类依赖分析器jdeps Stream API - 把真正的函数式编程风格引入到Java中。 Date Time API - 加强对日期与时间的处理 Optional 类 - Optional 类已经成为Java 8 类库的一部分,用来解决空指针异常 Base64 Java8 内置了Base64 编码的编码器和解析器 2.hashMap 底层实现?当你put一个元素时,在底层结构是如何执行的? 首先需要知道在不同的JDK版本上面hashMap 的实现是有区别的: JDK8之前: 数组 + 链表 JDK8之后:数组 + 链表 + 红黑树 当你put元素时: 执行步骤: a.计算该元素的hashCode 值 b.通过计算它的hashCode 值去确定数组下标,数组的初始化16大小,增长因子为0.75 c.当存在哈希冲突是,相同的hashCode 值得到的数组下标就是会一样的,则单纯的数组则不满足,需要链表的支持 d.链表满足长度大于8时转成红黑树,那为啥8呢

二面快手,凉在SpringBoot上!

旧街凉风 提交于 2020-10-31 06:03:42
Java 圈内最近对“面试问 Spring” 的吐槽越来越多:不管大小 公司 o r 项 目,面试官都要跟 你扯一扯 Sprin g Boot、微服务 ,如果答不下来,大概率直接说拜拜! 不少互联网企业,像快手、美团、网易这些一线大厂都在用 Spring 来做敏捷开发。尤其有过不少项目经历的技术人,跟 Spring 相处的时间比跟对象相处的时间还要长。“SpringBoot、SSM 框架有什么好问的?”等类似的吐槽频频曝出。 的确, 作为Java 后端开发, 技术更新迭代是相当快, SpringBoot、SringCloud、Dubbo等各种开源框架 对于使用者来说十分友好,只要编程功底良好,较短的时间就能玩转。但如果仅仅止步于此,就有点陷入误区了。 以SpringBoot 为例,它 解决 的问题就是 Spring 依赖和自动配置的问题。 这 对初学者来说非常便捷 ,但一旦涉及到组件的细节配置,其他框架的整合、调优, 改起来就非常吃力,最后只能追源码。 因此,要想把一种技术吃透,仅限于会用是远远不够的。 如何提高代码性能?出现问题如何快速定位和排查?如何高效实现业务整合? 都是开发者需要考虑的问题。 这里分享一个十分干货的技术分享 《 SpringBoot 技术整合秘籍》,相信各位 从中学习到前辈优秀的高性能代码设计经验、调优配置技巧,总结出最优使用方案,绕过工作中遇到的很多坑

SpringBoot搭建web项目

霸气de小男生 提交于 2020-10-31 04:50:39
1.SpringBoot的优点 支持内嵌的servlet容器,只需要将项目打包jar包,使用java -jar xxx即可运行项目 提供大量的start来简化maven配置 提供了默认的spring配置 提供了服务监控工具Actuator 2.使用SpringBoot创建web项目 以IntelliJ IDEA为例子。点击File-new project,到以下页面: 选择Spring Initializer,点击next,到以下页面: 输入正确的项目名称,使用默认配置一直点击下一步。到创建项目完成。 项目创建完成后目录结构如下图: 其中DemoApplication代码如下如下: @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 此类中的main方法为springboot项目启动的入口。 此类中的SpringBootApplication注解可以触发自动配置Spring功能,并且项目自动扫描此注解标识的类同目录文件下的所有Spring的bean。 3.创建web接口 pom文件中添加Springboot-web-start依赖: <

记一次微信小程序云函数操作Mysql数据库

你说的曾经没有我的故事 提交于 2020-10-30 16:09:35
一、前因 在制作课程设计的时候需简单地操作Mysql数据库使得小程序可以与其他端系统进行数据交互 这时候问题来了,仅仅只是因为一个插入表的数据库操作就单独制作一个Servlet看似又有点浪费服务器资源 这时候就想了下,为什么不能直接用微信小程序直接进行数据库交互操作呢? 然后查了下文档和百度,发现了云函数这强大的东西 云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。 小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。 好家伙,开整 二、探Node 不要看到js就以为是前端语言 node.js是 运行于服务端的JavaScript解释器 所以,node.js是后端语言(跑题了) 微信云函数用的语言就是node.js 所以你要先安装node.js 去官网下载一个吧 安装过程是傻瓜式操作,全部下一步,中间有个勾勾问你是否自动帮你配置环境变量的把他勾上就好了 然后就去开通云函数 在你开通微信云服务的时候就会免费送你一定额度的数据库、云函数、云储存空间 三、云之基 在此之前需要先开通一个云开发,因为我已经开通了,所以就没有截图可以保留了

SpringBoot开发案例之整合Activiti工作流引擎

梦想的初衷 提交于 2020-10-30 13:41:37
前言 JBPM是目前市场上主流开源工作引擎之一,在创建者Tom Baeyens离开JBoss后,JBPM的下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过,目前官网已经推出了JBPM7的beta版本;Tom Baeyens加入Alfresco后很快推出了新的基于jBPM4的开源工作流系统Activiti。由此可以推测JBoss内部对jBPM未来版本的架构实现产生了严重的意见分歧。 搭建 花了半天的时间对比了下JBPM 和 Activit,以及两个工作流的不同版本,最终选择了 Activiti6 来实现,理由如下: JBPM 网上集成的资料甚少,且新版本相对比较笨重。 Activiti 相对丰富的资料,并且高度与 SpringBoot 集成,之所以选择 Activiti6 版本,是由于目前只有版本6的集成 starter。 创建 pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

你离BAT之间,只差这一套Java面试题。

て烟熏妆下的殇ゞ 提交于 2020-10-30 09:14:17
你离BAT之间,只差这一套Java面试题。 点击上方“Hollis”关注我,精彩内容第一时间呈现。 全文字数: 5500 阅读时间: 10分钟 最近,各大公司开始了春招,很多人已经开始在准备面试了,特地来总结下初中级程序员应该掌握的面试题目。这篇面试指南,只适用于初中级程序员,其中不涉及分布式等问题。关于中高级的程序员问题,我后面可能再出一篇文章。 对于一个初中级程序员来说,面试问题不仅仅涉及到Java语言,还会包括很多其他知识,比如计算机基础知识(数据结构、计算机网络、操作系统等)、C语言基础、Java底层知识以及一些框架相关知识等。本文几乎覆盖到了所有领域。 ❈ 计算机基础知识 C语言基础 Java基础 Java高级 Java Web 设计模式 知识的综合能力 工具使用 项目相关 技术热情 表达能力 思考方式 其他 推荐阅读 ❈ 还有,我知道很多人会问关于这些题目的答案问题。答案我都有,由于篇幅有限没办法直接贴上来。这些题目的答案我会在我的公众号及知识星球中给出,感谢关注。 我总结的这套题目,总数是280道,道道都是精品必考题。如果这些面试题都能很好的回答上的话,参加国内各大公司的校招基本都没啥问题。 我很难估算一个人要掌握这所有的题目有多难。但是我觉得,如果你是一个有一定的计算机基础知识并且有一定的Java经验。比如一个学习还不错的大三学生

解决vue跨域问题

我只是一个虾纸丫 提交于 2020-10-30 09:07:09
package com.qmtt.config; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletResponse; /** * @author admin 自定义过滤器 */ @WebFilter(urlPatterns = "/*", filterName = "corsFilter" ) public class CorsFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse rep,

整合ssm框架

断了今生、忘了曾经 提交于 2020-10-30 08:19:00
连载于 https://www.cnblogs.com/gscq073240/articles/6298055.html 在写代码之前我们先了解一下这三个框架分别是干什么的? 相信大以前也看过不少这些概念,我这就用大白话来讲,如果之前有了解过可以跳过这一大段,直接看代码! SpringMVC:它用于web层,相当于controller(等价于传统的servlet和struts的action),用来处理用户请求。举个例子,用户在地址栏输入http://网站域名/login,那么springmvc就会拦截到这个请求,并且调用controller层中相应的方法,(中间可能包含验证用户名和密码的业务逻辑,以及查询数据库操作,但这些都不是springmvc的职责),最终把结果返回给用户,并且返回相应的页面(当然也可以只反馈josn/xml等格式数据)。springmvc就是做前面和后面过程的活,与用户打交道!! spring :太强大了,以至于我无法用一个词或一句话来概括它。但与我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们 Java 中的类,当然也包括service dao里面的),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字new。另外spring的aop,事务管理等等都是我们经常用到的。 MyBatis

Grafana+Prometheus系统监控之SpringBoot

拜拜、爱过 提交于 2020-10-30 08:13:30
前言 前一段时间使用SpringBoot创建了一个 webhook 项目,由于近期项目中也使用了不少SpringBoot相关的项目,趁着周末,配置一下使用prometheus监控微服务Springboot。 项目配置 引入坐标 <!-- Exposition spring_boot --><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_spring_boot</artifactId> <version>0.1.0</version></dependency><!-- Hotspot JVM metrics --><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_hotspot</artifactId> <version>0.1.0</version></dependency><!-- Exposition servlet --><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_servlet</artifactId> <version>0.1.0</version></dependency>