![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java编程基础
文章平均质量分 58
哔哔小子
这个作者很懒,什么都没留下…
展开
-
java项目 服务器部署Word转成PDF乱码
1、问题描述用户在使用系统时,发现文件预览偶尔,显示乱码。2、问题定位关于文件预览功能,以前从未出现类似问题。最近为了提高服务器负载,新增几台服务器,部署了此服务。由此推断,此问题与预览服务无关。可能与服务器配置有关系。然后,根据推断,搜索相关关键字,发现应该与服务器字体有关。3、解决问题步骤上传字体文件 首先在C:/windows/fonts找到windows下的字体,后缀为.ttf和.ttc,在服务器/usr/shared/fonts目录下新建一个目录chinese,将找到.t..原创 2022-03-22 11:20:33 · 2639 阅读 · 0 评论 -
java doc、docx、pdf格式互转
使用Aspose工具进行格式转换,Linux下支持,不需要安装额外的软件和操作。一、概述:Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务。Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式。使用Aspose.Words可以在不使用Microsoft.Word的情况下生成、修改、转换和打印文档。二、功能简介:1、Aspose.Words具有高质量的文件格式转换功能,可以和Doc,OOXL..原创 2021-11-09 11:32:36 · 1392 阅读 · 0 评论 -
java中 获取classpath路径
一:properties下配置在resources下定义server.propertiesregister.jks.path=classpath\:conf/userRegister/migu.jksxml配置server.properties<util:properties id="settings" location="classpath:conf/server.properties"/>在service类里注入: private Resourc.原创 2021-10-28 09:39:31 · 5368 阅读 · 0 评论 -
mybatis-plus更新问题 全量更新、只更新部分属性
项目:前端vue+后台java项目数据库:默认是null,不是""遇到的问题:使用elementUI的下拉框、treeSelect等控件删除一个对象的某些属性,之后无法成功更新“删除”掉这些数据mybatis默认更新规则是不更新属性为null的属性的。一般情况下遇到的一个问题就是:只能改属性,删不掉属性。从安全、性能角度考虑确实需要这样,但是如果一张表有多重数据入口,比如可以在多个页面操作修改含有同一个表的数据,就必须得查出来所有字段,会影响一部分性能,另外项目迭代、连表查询时也容易原创 2021-04-07 13:48:04 · 8945 阅读 · 3 评论 -
java中一个对象占多少字节
a原创 2020-11-03 18:58:10 · 1406 阅读 · 2 评论 -
java 线程池不抛异常 异常捕获失败问题
背景分段执行业务时需要执行某段sql语句,由于是多个线程执行多个sql,线程之间需要使用一些读锁,若发生异常需要释放锁,结果某个线程的sql出现了错误,后台没有打印错误日志。List<ImportModel> query = query(dataTransfer.getEngName(), sql); try { readLock.lock(); arrayList.add(原创 2020-10-29 17:43:39 · 1741 阅读 · 0 评论 -
Java8 List去重(单属性或组合属性)
code:package com.demo.jdk8.collectors; import com.google.common.collect.Lists;import org.junit.jupiter.api.Test; import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.TreeSet;import java.util.stream.Coll.原创 2020-10-15 13:47:14 · 480 阅读 · 0 评论 -
spring框架类加载顺顺序 并 在spring启动后查询数据库加载到容器内
这些场景常用于一些饿汉式加载数据,比如让系统启动时加载一些数据库中的数据,或者读取一些数据之类的,数据交给spring管理。数据量少可以用枚举,数据量不多不少也能用静态(数据源是数据库写法就麻烦),也能直接放到jvm内存里,不过这样对于分布式系统不友好,所以主流都是redis里。不过spring跟redis都需要等待spring加载完毕后进行初始化,并且这个初始化都是执行一次。之前我是这样写的:因为涉及spring相关,而构造方法又早于spring,没法通过对象的无参构造进行实例化,只.原创 2020-10-13 18:23:39 · 839 阅读 · 1 评论 -
java 动态代理 jdk为何比cglib效率低 原理总结
JDK 动态代理通过回调拦截方式,通过反射获取模板接口名字、内部方法以及参数,再原来的接口上修改,拼接,产生一个新的java代理对象(类似于mybatis的反序列化代码过程)1.拼接java源代码2.编译为class文件3.类加载器加载新的class到内存中4.通过反射执行方法Cglib动态代理采用继承方式,底层基于asm字节码技术参数一个新的java代理对象1.生成class文件2.读取class文件到内存中3.采用fastclass索引机制执行方法...原创 2020-10-13 10:11:03 · 1457 阅读 · 2 评论 -
java写法可能存在的 java.lang.OutOfMemoryError: Java heap space 问题
这也算一种最常见的、但是容易忽略的一种潜在问题吧背景在某个数据校验输出过程时会产生较多的临时数据,这些临时数据若不及时处理,可能会导致堆内存溢出。过程从图中可知,内存达到50%左右会进行一次gc操作,在某次gc操作之后调用某个接口,该接口产生了较多的临时数据多次调用,结果显示,每次调用时接口,都进行了gc操作,但是上次操作已经结束数秒了,结果gc的并不是很彻底,所以堆内存的容量扩容了,但是这样下去迟早会达到计算机的内存(理论上是这样,但是系统应该会进行full GC吧)...原创 2020-10-10 16:38:42 · 197 阅读 · 0 评论 -
idea64.exe.vmoptions 参数意义
本地调试必备~------------------------------------------------------------------------------------------------------------在解决一些项目问题时,常常会有加虚拟机参数的需要。这里解释了 idea64.exe.vmoptions文件中个参数的意义:-Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepG转载 2020-10-10 10:53:30 · 983 阅读 · 0 评论 -
java 多线程和spring之间的坑
需求把某个网站上或者别的数据库里导出的文件全部导入到自己的数据库里数据文件和格式已经给出了,不需要关心从哪来,只需要读取到数据库里就行,不能出错,不能时间太长。大致实现个人思路是先对数据进行分片,按照一定规则(数据数量)进行切分,然后多个线程同时读取往数据库里写,同时彼此控制事务。遇到的问题数据量少100万以内时没有遇到问题,数据量大的时候分片量大线程数也大。线程达到了8个,然后服务调取业务层时出现了:第八个线程总是会被无缘无故阻塞。日志表明8个线程都已经进入调用..原创 2020-09-30 15:24:24 · 172 阅读 · 0 评论 -
java多线程使用心得
1.多线程的使用场景其实简单归纳就是一点:想要提高响应速度就可以举个很简单的业务,假使某个service里面涉及了4个mapper操作,且假使数据库部分耗时,每个mapper操作都约为1秒,普通的后台串行执行时间就是一个加法数学模型(1+1+1+1),这个时候若想提高效率最简单的方法就是同时执行这4个mapper操作,准确的描述是并发执行,这时若不考虑其他硬件性能,并发执行时间的数学模型大约为(1*N),这个N跟硬件性能、当前系统jvm之类的都有关,一般来说都是小于2的,这样一般情况下就能提高一倍的原创 2020-09-29 15:35:53 · 417 阅读 · 0 评论 -
CompletableFuture 使用详解
1、 runAsync 和 supplyAsync方法CompletableFuture 提供了四个静态方法来创建一个异步操作。public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)public static <U&g.转载 2020-09-17 17:37:12 · 3657 阅读 · 0 评论 -
java 状态模式的实现与应用
我感觉下面的原文似乎把问题复杂化了,大致看了一下状态模式不难理解,以实际mvc模式开发的角度来理解就是:根据实体类的状态进行不同的业务。对外界暴露一个方法,具体判断写到内部。比如这个文章写的比较具体:https://blog.csdn.net/weixin_39397471/article/details/82843404因为目前阶段最终都是要围绕spring模式开发的,就以springmvc的形式举一个例子。功能:根据前台传来的code值,实现角色表的增删查改实体类表:..原创 2020-08-11 15:33:29 · 413 阅读 · 1 评论 -
项目创建多少个线程合适
mark一下,写得很详细https://www.jianshu.com/p/f30ee2346f9f转载 2020-07-14 10:37:29 · 379 阅读 · 0 评论 -
netty心跳功能机制实现
关于netty的文章写得很实用,有源码,mark一下https://www.cnblogs.com/demingblog/p/9957143.html原创 2020-07-13 19:17:16 · 153 阅读 · 0 评论 -
netty中ChannelHandler执行顺序案例详解
一、netty的Pipeline模型netty的Pipeline模型用的是责任链设计模式,当boss线程监控到绑定端口上有accept事件,此时会为该socket连接实例化Pipeline,并将InboundHandler和OutboundHandler按序加载到Pipeline中,然后将该socket连接(也就是Channel对象)挂载到selector上。一个selector对应一个线程,该线程会轮询所有挂载在他身上的socket连接有没有read或write事件,然后通过线程池去执行Pipelin转载 2020-07-13 18:51:46 · 1550 阅读 · 1 评论 -
java final修饰的变量作用
之前一直以为final修饰的变量不能改变,这个理解是有问题的。首先final修饰的基本变量是不可变的,但是final修饰的对象要看以下情况:先定义一个自定义对象@Datapublic class FinalUser { private String name; public FinalUser(String name) { this.name = name; }}然后在别的对象里引用一下,加上final修饰符@Datapubl..原创 2020-07-13 09:58:16 · 1274 阅读 · 0 评论 -
利用设计模式优化项目实际的申报业务
业务场景:有很多的申报需要等待审批,之前的老项目实在是难以看,到处是if-else原创 2020-07-10 14:42:48 · 257 阅读 · 0 评论 -
JAVA设计模式之观察者模式
1、初步认识观察者模式的定义: 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话: 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。2、这个模式的结构图3、可以看到,该模式包含四个角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来.转载 2020-07-08 19:00:32 · 130 阅读 · 0 评论 -
java面向接口编程详解
以策略模式跟适配器模式为例:相信看到这篇文字的人已经不需要了解什么是接口了,我就不再过多的做介绍了,直接步入正题,接口测试如何编写。那么在这一篇里,我们用一个例子,让各位对这个重要的编程思想有个直观的印象。为充分考虑到初学者,所以这个例子非常简单,望各位高手见谅。 为了摆脱新手的概念,我这里也尽量不用main方法,而采用testNG编写测试用例。定义:现在我们要开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。上下文(环境):已知要实现U盘、MP3播转载 2020-07-08 17:57:47 · 568 阅读 · 0 评论 -
java日志分级概要
记录一下,用于以后的规范化原创 2020-06-28 11:05:48 · 155 阅读 · 0 评论 -
几种常见单例的写法和问题
1.为什么用单例?简单来说就是全局共享一个对象,如果某对象初始化很麻烦也推荐用单例,只有一个情况下好管理,什么配置类,Util包一般情况下最好都是单例2.单例跟static关系两者有点像,static从理解是确实是“单例”,但是根本所处JVM区域不同,static只能在静态方法区,单例对象还可以再堆里,spring容器常见吧,这不就是一个最好的单例,JVM调优调的也主要是堆,静态区以后少用。3.懒汉饿汉当做一种思维来理解4.单例实现一定要保证私有构造,我看网上很多人忘了写这个,.原创 2020-06-23 08:53:01 · 172 阅读 · 0 评论 -
synchronized锁和lock锁 队列中线程执行顺序对比
背景最近复习一下多线程,上面说到synchronized是将被阻塞的现场放到一个虚拟队列(Lock-Free无锁机制)中,而Lock是通过AQS队列存放阻塞的线程。那synchronized里的线程默认是怎么竞争锁的,Lock又是如何?之前记录的结论:思路开启一个死循环,然后让多个线程竞争通一把锁,被阻塞的线程孜然就会被放到对应的阻塞队列里,执行时打印线程的名字,然后根据打印的结果判断顺序先验证synchronized的情况,创建一个runnable实现类,然后共享成员变..原创 2020-06-11 16:34:03 · 598 阅读 · 2 评论 -
java并发-独占锁与共享锁
转自:https://blog.csdn.net/wojiushiwo945you/article/details/42292999另外可以看下这个:https://blog.csdn.net/luofenghan/article/details/750650011 锁的独占与共享java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问共享资源,如:ReadWri..转载 2020-06-11 10:19:15 · 529 阅读 · 0 评论 -
java8 stream流操作的flatMap(流的扁平化)
flatMap的用法和含义住要通过一个案例来讲解,案例:对给定单词列表 ["Hello","World"],你想返回列表["H","e","l","o","W","r","d"]第一种方式 String[] words = new String[]{"Hello","World"}; List<String[]> a = Arrays.str...转载 2019-11-18 18:36:17 · 3700 阅读 · 1 评论 -
简单描述下AOP
什么是AOP?AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左...原创 2018-07-13 13:27:25 · 5023 阅读 · 1 评论 -
如何简单描述java中的代理模式
java里什么是代理比如A是一个接口,B是被加强对象,C是代理对象A接口有一个say()方法,B实现了A接口,C也实现了A接口,C在自己实现的say()方法里不但执行了B的say()方法也执行了一些自己的程序,这就是代理。代理分为静态代理和动态代理。为什么要代理类的增强可以通过继承来实现,那如果想让某个方法增强呢?这时候就用到代理了。如何代理?大体上有目标类,代理类,增强(通知),连接点。代理类在...原创 2018-07-13 09:55:56 · 838 阅读 · 0 评论 -
多重加载Bean方式
可以从Bean定义、名称、注入、生命过程等方面分类也可以从基于配置方式进行分类。大体上可以分为以下图中几种类型的加载方式。Bean定义方面:声明Bean,为了以后的调用,大部分用来定义类对象和方法 基于Xml:最简单的方式,直接在xml文件中配置id并在java里获取Id。 有三种获取方式,原理相同都是在xml里设置Bean的Id,也可以通过factory-method方式获取 需要注意构造函数和...原创 2018-07-12 13:51:10 · 500 阅读 · 0 评论 -
Bean的生命周期简单过程
Bean的生命周期可以简单分为11个周期:1.构造方法。不管是反射获取和静态工厂获取都会调用Bean嵌套类的构造方法。2.封装属性。封装Bean嵌套 类 的属性,值可以在对应xml文件的<Bean>标签内用<property>设置3.实现BeanNameAware接口,实现setBeanName()方法。该方法是用来设置Bean的name,传来的值为xml里该Bean的Id...原创 2018-07-11 17:39:31 · 2711 阅读 · 0 评论 -
MyBatis入门使用方式
MyBatis解决了JDBC的不便于修改,硬编码过多的缺点,是一种比较轻量级的框架动态代理模式能简化代码的编写,只需配置一些xml文件就能动态生成代理对象来执行sql。 需要的文件:JDK、Mybatis架包(官网下载后lib全部导入)、log4日志文件(可以不用)、JDBC驱动包(网上哪都有)关键文件:sqlMapConfig.xml(差不多是个数据库全局配置,需放到classp...原创 2018-07-17 17:54:11 · 259 阅读 · 0 评论 -
Spring面试问题和答案
转载:https://blog.csdn.net/sxdtzhaoxinguo/article/details/805048391.Spring框架是什么?Spring框架是一个开放源码框架,用于解决企业应用程序开发的复杂性。Spring框架的主要优势之一是它的分层架构,它允许您对所使用的组件进行选择。Spring的主要模块是Spring核心、Spring AOP和Spring MVC。2.Spr...转载 2018-07-11 15:50:07 · 164 阅读 · 0 评论 -
Spring框架入门程序:获取Bean的三种方式
Service中三种测试对象类,test包下为测试类Bean文件:配置相应的bean来获取Test类:使用Junit来测试不同的方法UserService类:通过反射形式获取,需要一个无参构造函数,不写构造函数即可,如果写了构造函数一定要写上无参构造public class UserService { private String name; public void say() { Syste...原创 2018-07-11 14:03:06 · 1529 阅读 · 0 评论 -
简单了解一下如何使用Spring框架里JDBC和事务
JDBC概念Jdbc是一种Java连接数据库技术(Java database connectity), 它是 Java 提供的一些接口,这些接口大部分是数据库厂商提供的(jar包),我们要做的,是连接数据库以后,如何使用Java代码从数据库中存取数据Spring框架中的JDBC以前初学时手敲的JDBC即多又麻烦重复,并且涉及事务时需要在filter层进行控制,请求连接多的时候还要使用数据库池连接技...原创 2018-07-14 10:09:00 · 375 阅读 · 0 评论 -
Servlet中上传下载模板代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { //上传文件 //1.创建文件工厂 DiskFileItemFactory factory = new DiskFileIt...原创 2018-07-15 15:37:57 · 412 阅读 · 0 评论 -
在Session中放HashMap在Jsp中用JSTL遍历方法
foodList为HashMap的名称<c:forEach items="${foodList}" var="food"> <tr height="60" id="${food.value.id}"> <td align="center" width="20%"><原创 2018-07-15 16:13:20 · 1350 阅读 · 0 评论 -
Spring中拦截/和拦截/*的区别
一、我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息: <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>...转载 2018-07-21 07:51:42 · 1125 阅读 · 0 评论 -
Java中String直接赋字符串和new String的区别,intern的作用
解析Java中的String对象的数据类型 1. String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 3. String str=”kvill”; String str=n...转载 2018-09-02 14:38:43 · 348 阅读 · 0 评论 -
Java1.5并发包下阻塞队列的生产者与消费者功能简单实现
BlockingQueue为Java1.5版本之后并发包下的接口,实现其功能大多为阻塞队列,特点为线程安全适合多线程下的数据操作。利用阻塞队列的特征可以轻易完成生产者与消费者的多线程同步问题注意的问题:1.多个线程需要公用一个阻塞队列对象2.AtomicInteger对象的自增为原子性,多线程环境下不会出现“脏读”问题3.blockQueue .offer(A,B,C),...原创 2019-05-07 11:17:13 · 142 阅读 · 0 评论