SpringBoot整合OCR功能
简介
使用Java实现图片内容的实现功能,如验证码图片的读取
所用框架:Tess4j 项目地址:https://github.com/nguyenq/tess4j
整合使用
安装下载tessdata语言包,添加语言库
tessdata.zip
引入依赖:
12345678910<dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.14.0</version></dependency><dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>4.5.4</version></dependency>
整合基本使用
定 ...
Lambda表达式的方法引用
概述在使用Lambda表达式的时候,我们在方法体中所写的代码就相当于是一种解决方案:那所提供的参数,执行方法体中的代码。所以如果当时Lambda表达式的方法体中除了调用现有方法之外什么都不做,就使用其本来就已经存在的方案,这个时候我们就可以采用方法引用的书写方式。
实例方法引用语法:对象 :: 实例方法
特点:在Lambda表达式的方法体中,通过“对象”来调用指定的某个“实例方法”。
什么是实例方法?
在Java中,实例方法是与对象实例相关联的方法。换句话说,它们是定义在类中的方法,必须通过类的实例(对象)来调用。实例方法可以访问和操作对象的属性,并且可以调用其他实例方法。
要求:函数式接口中抽象方法的返回值类型和形参列表与内部通过对象调用某个实例方法的返回值类型和形参列表保持一致。
12Consumer<String> consumer = System.out::println;consumer.accept("Hello World");
1234567891011Teacher teacher = new Teacher("ande ...
四个基本的函数式接口
函数式接口介绍:函数式接口是Java 接口的一种,但在接口的基础上,还需要满足:
一个函数式接口只有一个抽象方法(SAM,single abstract method);
Object 类中的 public abstract method 不会被视为单一的抽象方法;
函数式接口可以有默认方法和静态方法;
函数式接口可以用@FunctionalInterface 注解进行修饰。
函数式接口的作用:函数式接口带给我们最大的好处就是:可以使用极简的Lambda表达式实例化接口。
四个基本的函数式接口:
以上的函数式接口都在java.util.function包中,通常函数接口出现的地方都可以使用Lambda表达式
@FunctionalInterface :
一个接口只要满足只有一个抽象方法的条件,即可以当成函数式接口使用,有无@FunctionalInterface都无所谓,但是jdk定义了这个注解肯定是有原因的。
@FunctionalInterface更相当于是一种限制,凡是使用了这个注解的接口,开发者可放心大胆的使用lambda来实例化,使用了这个注解的接口只允许存在一个抽象方 ...
Lambda表达式的基本使用
语法进一步精简规则在原本的语法基础上,Lambda表达式已经相对来说比较精简了,但在以下的应用场景中,我们就可以对Lambda表达式的语法进行精简,场景如下:
形参类型可以省略,如果需要省略,则每个形参的类型都要省略。
如果形参列表中只存在一个形参,那么形参类型和小括号都可以省略。
如果方法体当中只有一行语句,那么方法体的大括号也可以省略。
如果方法体中只有一条return语句,那么大括号可以省略,且必须去掉return关键字。
基本使用结合更为精简的语法规则对Lambda表达式进行运用
无返回值函数式接口情况一:无返回值无参数123456789NoParameterNoReturn obj1 = new NoParameterNoReturn() { @Override public void test() { System.out.println("无参无返回值"); }};obj1.test();NoParameterNoReturn obj2 = () -> System.ou ...
Lambda表达式介绍
函数式编程思想Java从诞生之日起就一直倡导“一切皆对象”,在Java语言中面向对象(OOP)编程就是一切,但是随着Python和Scala等语言的崛起和新技术的挑战,Java也不得不做出调整以便支持更加广泛的技术要求,即Java语言不但支持OOP还支持OOF(面向函数编程)。
JDK1.8引入Lambda表达式之后,Java语言也开始支持函数式编程,但是Lambda表达式不是Java语言最早使用的,目前C++、C#、Python、Scala等语言都支持Lambda表示。
Lambda表达式是JDK1.8的一个新特性,可以取代大部分的匿名内部类,以便写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
面向对象的思想
做一件事情,找一个能解决这个事情的对象,然后调用对象的方法,最终完成事情。
函数式编程思想
只要能获得结果,谁去做的,怎么做的都不重要,重视的是结果,不重视实现过程。
JDK1.8中的Lambda表达式就是一个函数式接口的实例,这就是Lambda表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么 ...
MVC模式与三层架构模式
MVC模式与三层架构模式什么是MVC模式?MVC模式,即Model模型、View视图、Controller*控制器
View:视图,用于为用户提供使用界面以及与用户直接进行交互
Model: 模型,用于承载数据,并对用户提交的请求进行处理。一共分为两类:
数据承载Bean:指的也就是实体类(如:User类、Student类),专门用于处理承载业务数据。
业务处理Bean:则指的是service或dao对象,专门用于处理用户提交的请求(登录、注册)。
Controller****:控制器,用于接收用户请求,并将请求跳转(转发、重定向)到对应的Model进行处理;Model处理完毕后,交接过返回给控制器,结果经过渲染后,再有控制器将结果返回给视图层。
MVC模式的工作流程
用户通过View页面向服务端提出请求,可以是表单请求、超链接请求、AJAX请求等
服务端Controller控制器接收到请求后进行解析,找到对应的Model对用户请求进行处理
Model处理后,将处理结果再交给Controller
Controller在接到处理结果后,根据处理结果找到要作为客户端发回的响应 ...
对于数据库范式(1NF,2NF,3NF,BCNF)的理解
对于数据库范式(1NF,2NF,3NF,BCNF)的理解
第一范式定义:属于第一范式关系的所有属性不能够再被拆分,即为一张简单的基本表
一个列名智能对应到一列,并且每一列都不可分
复杂表还能继续拆分,不符合第一范式:
符合基本范式的基本表:
第二范式定义:前提是满足第一范式且每个非主属性完全函数依赖于任何一个候选码则关系R为第二范式
什么候选码?
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。
什么是主属性?
所有候选码的属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。
什么是完全函数依赖?
设R(U)是属性集U上的关系模式,X、Y是U的子集。如果Y函数依赖于X,且对于X的任何一个真子集X’,都有Y不函数依赖于X’,则称Y对X完全函数依赖。记作:如果Y函数依赖于X,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
简单说就是:指不能存在仅依赖于候选键(主属性)的一部分的属性,所以只有一个主属性的表如果符合第一范式就一定符合第二范式。
如何判断是否符合第二范式?
找出数据表中所有的 ...






