java相关
文章平均质量分 70
java相关技术
Tatum_99999
java开发
展开
-
java程序6H到14min及80G内存到28G的优化过程(补充记录)
前言前边有发过一篇代码优化的文章:记一次java程序从6H到30min的优化过程大概描述的是一个java程序从最大内存至少80G,运行需要6H30min,到最大内存降到75G并且运行30min的优化过程。但是实际上这个结果并不达标,基于现有的环境,期望的最大内存不能超过64G,并且在可以接收的处理时间内这个内存应该越小越好。终于又经过了几天的奋战后,这个结果变成了28G和14min。(这里的时间,并非指单纯读文件的时间,而是整个程序所有业务的完整时间)最终优化方案解析达到上述效果的原因,主要是原创 2022-04-12 19:20:36 · 920 阅读 · 0 评论 -
记一次java程序从6H到30min的优化过程
背景我们有一个java系统,需要从固定的文件目录中读取csv格式的文件,然后将文件内容读取后在进行一系列的转换以及数据库操作,包含文件内容转换为java对象、内容去重、查询oracle、生成目标数据集合、数据存入oracle和mongodb。起初,文件目录中有四个文件,一个4.3G,另外三个都是几百兆,四个文件一起有5.3G,大约1200万条初始数据。程序之前使用的文件都比较少,因此之前设置的主要jvm参数是-Xms64m -Xmx64G -XX:NewRatio=1 -XX:+UseConcMar原创 2022-04-07 22:23:25 · 550 阅读 · 2 评论 -
阿里云centos安装sonar问题记录
前言最近在阿里云服务器上重新安装了jenkins,同时打算集成更多的常用的插件,例如sonar。很多年前,我在自己的windows电脑上安装过sonar,不过那个电脑我已经没再用了,这次在阿里云上准备按之前的笔记重新安装sonar,但是依旧是不太顺利。github下载问题首先就是参考之前的博客使用sonar进行java代码质量管理去github下载的时候就卡住了,我先执行如下操作克隆代码:git clone git://github.com/SonarSource/sonar.git上边操作并原创 2022-03-26 13:19:33 · 4541 阅读 · 0 评论 -
java基础之多线程总结三(AQS、ThreadLocal和线程池)
AQS多线程里很多新型锁实现的关键是AQS,AQS指的是AbstractQueuedSynchronizer这个类,整个锁实现过程的关键是CAS操作加volatile。拿ReentrantLock非公平锁的lock和unlock举例,首先lock的源码中调用过程如下:ReentrantLock.lock()-->ReentrantLock.Sync.lock()-->ReentrantLock.NonfairSync.lock()最后这个方法的实现逻辑是这样的:final void原创 2022-02-27 21:33:32 · 663 阅读 · 0 评论 -
java基础之多线程总结二(CAS和各种常用锁)
CAS在java中,对很多常见的需要加锁的操作进行了封装,例如Atomic开头的一些类,这些类是线程安全的,但是内部却不是用synchronized加锁实现,而是CAS。例如AtomicInteger的’incrementAndGet()'方法最终调用的实际是下边这个方法@HotSpotIntrinsicCandidate public final native boolean compareAndSetInt(Object o, long offset,原创 2022-02-25 00:08:23 · 676 阅读 · 0 评论 -
java基础之多线程总结一(创建、状态、synchronized和volatile)
线程基本创建和启动方式不考虑线程池的情况下,创建和启动线程的基本方式有如下几种1.直接new Thread类或者子类,2.实现runnable接口然后传递给Thread,这种方式更加灵活3.使用lambda表达式,实际上是实现runnable另一种写法示例代码:public class CreateThread { public static void main(String[] args) { Thread t1=new Thread(); t1.start(); Thread原创 2022-02-23 00:01:32 · 776 阅读 · 0 评论 -
java基础之结合源码理解集合(非concurrent)
集合常用接口和类java中的集合非常重要,是一种容器,也是一种引用数据类型,集合相关的接口和类非常多,不考虑concurrent中的情况下,最常见的有如下这些:从上图也可以看到主要分为两大阵营,一个是Collection,另一个是Map,在Collection中又分为List和Set。List是有序的,这个有序实际上指的是元素放入和取出顺序是有序的,而不是指元素的大小。Set是无序的,这个指的是元素放入和取出顺序不能保证。但是从上边可以看到Set下列出了HashSet和TreeSet,实际上Tre原创 2022-01-08 00:07:49 · 819 阅读 · 0 评论 -
java基础之结合源码理解字符串类的重要知识点
字符串类字符串类主要是指String、StringBuffer和StringBuilder,从源码注释可以看到,String和StringBuffer都是jdk1.0就有的,而StringBuilder则是jdk1.5才有。一般来说,最常用的是String,是不可变的,然后是可变的StringBuilder和StringBuffer,其中StringBuffer是线程安全的,因为里边的方法都是加了synchronized关键字的。StringBuilder和StringBuffer都是继承自Abstr原创 2022-01-04 11:06:03 · 612 阅读 · 0 评论 -
java基础之数据类型及变量
在前两篇中,我们写了一个简单的java入门程序,同时带出了一些类和方法的定义规则,也对什么是类,什么是对象以及什么是属性和方法做了一定的解释。java基础介绍及第一个java程序java基础之类、对象、实例、属性、方法等概念理解我们应该知道了一个java类可以不定义任何的属性和方法,但是正常来说都是需要定义属性和方法的。在属性定义的时候我们定义了这样一个类:public class People { public String eye; protected String ears; Stri原创 2021-12-23 22:58:40 · 617 阅读 · 0 评论 -
java基础之类、对象、实例、属性、方法等概念理解
在之前的文章里,讲过一些java基础概念,并写了一个简单的java入门代码,通过这些代码,对类和方法的定义做了部分说明。java基础介绍及第一个java程序如果是了解java的同学,可能就没什么问题,但是如果是初次接触,可能就会对什么是类、什么是方法这些概念感到茫然。那么这一篇就在之前的基础上,对更多的一些相关概念进行解释。类和对象(实例)编程语言和其他很多语言一样,都是来源于生活的,所以java里边的一些名词和概念实际上也都是源于生活。类首先,我们在生活中肯定听过很多关于“类”的名词,例如人原创 2021-12-23 17:37:45 · 1117 阅读 · 5 评论 -
java基础介绍及第一个java程序
跨平台java很长一段时间都是应用最广泛的后端编程语言之一,之所以如此,有一个最重要的特性就是跨平台。什么是跨平台呢,在java中有一个说法叫做“一处编译,到处运行”。一处编译可以理解为就是同一套一模一样的代码,到处运行是指这一套一模一样的代码可以在各种不同的操作系统平台上运行,并达到一样的效果。这种特性大大的降低了需要运行在不同平台上的软件的开发成本,也更加方便软件的开发。一般日常工作写代码的电脑基本都是windows操作系统,而一般后台软件服务器又都是linux操作系统,java的跨平台就使得原创 2021-12-12 11:07:25 · 375 阅读 · 0 评论 -
我以为我会junit,原来我还不会
junit从某种程度上来说应该是很简单的一项技术,但是正所谓会者不难,难者不会,如果没有好好地用过,总会有些你以为是对的地方,其实他是错的。对于有7年java开发经验的我来说,不完全会写junit,实在是汗颜。以前的项目基本都没怎么要求写junit,所以我一直误以为junit简单到就是在Test中调一下相关方法,只要跑出绿色结果就好了,直到这一次需要相对正式的junit时,才发现这样是不对的,以下是从错到对的一个记录。业务功能代码例如我这里有一个很简单的Service,代码如下:/** * @A原创 2021-09-07 23:01:27 · 444 阅读 · 0 评论 -
java stream api熟悉和理解
前言stream api和lambda表达式都是java8出来的,都可以简化代码,也经常会配合着使用。对于上边的说法,网上是这么说的,但是我自己写的时候,总觉得好像有的时候确实简洁很多,但也有时候似乎反而更麻烦。所以,根据我目前的理解,我觉得可能它有它的适用场景,但并不能说用它就一定好,但是以后会不会改变这种看法也很难说。就我目前的了解,stream api主要用在对list集合及数组的操作,最大的优势在于各种中间操作。stream api是把集合等数据转化成stream,然后提供了一系列的api原创 2021-08-26 22:15:29 · 260 阅读 · 2 评论 -
lambda表达式基础
前言早在JAVA8出来的时候,我实际就已经了解过一点点lambda表达式和stream流,但是由于写惯了原来的那种风格,再加上当时的项目中也没有什么人使用,所以只是一扫而过,没有深入了解,也没有进行任何的练习,甚至还有那么一点抵触,觉得lambda读起来太不好懂。但是现在过去好几年了,这份新工作的项目中也已经是大量的lambda和stream,因此是时候该好好的了解一番,以和项目组整体风格尽量一致。示例经过了解,lambda表达式的应用场景是,任何有函数式接口的地方。什么是函数式接口呢,其实就是只原创 2021-08-25 21:47:23 · 169 阅读 · 0 评论 -
若依管理系统RuoYi-Cloud版搭建记录
现在快速构建web应用程序的系统有很多,若依RuoYi是其中一个,根据官网说明,使用最流行的技术SpringBoot、Shiro、Thymeleaf、Vue、Bootstrap,这个系统分为一体化版本和前后端分离版本。不管是学习某些技术,学习整体架构设计思想,还是拿来进一步二次开发,都是不错的选择。最近抽空搭了下这个环境,基本按照官网说明,但也有一些细节略有差异,以下为踩坑记录:RuoYi-Cloud代码下载若依系统官网是http://ruoyi.vip/,springcloud微服务版本的代码下载地原创 2020-10-30 13:13:04 · 6365 阅读 · 6 评论 -
个人聚合支付demo
需求在上一家公司和目前公司均参与支付项目的开发,但因为都是中途参与,因此一直对整体业务不是很熟,所以觉得有必要从头到尾自己开发一遍。各支付机构实际都封装有自己的sdk,可以集成之后进行很方便的开发,例如支付宝的sdk,可以让开发者把签名等很多过程都忽略掉。但是集成支付机构sdk的缺点也很明显,那就是每接一个机构就需要继承该机构的sdk,会导致jar包不断增多。同时,一旦支付机构的sdk进行...原创 2019-01-18 13:16:41 · 6904 阅读 · 3 评论 -
Jackson对泛型的序列化和反序列化方法汇总
说明:Jackson对于简单泛型是可以正常操作的,但是如果对于太过于复杂的泛型类有时会不成功。目前还在找着更合适的Json库。不过这一点在dotnet原生方案JavaScriptSerializer可以完美解决这一些问题,无论泛型多复杂。例子如下:package com.jsoft.springboottest.springboottest1.controller;import java.io.IOException;import java.lang.reflect.Type;import .转载 2020-07-17 16:36:29 · 1593 阅读 · 0 评论 -
前后台打通之springboot后台要点记录
接着之前的vue前端项目搭建成功,在实现了一些基本的页面功能之后,现在再搭建一下基础的后台,从而实现前后台打通,以下是整个打通过程中的一些关键点及感悟记录:springboot的后台项目搭建比较简单,如果单纯的实现接口的话,实际上没什么好说的,但是为了看起来不那么单调,就先暂时集成了一些非常基础的组件,例如logback、mybatis、lombok等。mybatis关联查询和特定标签使用s...原创 2020-03-05 19:15:47 · 801 阅读 · 0 评论 -
vue前端项目搭建和要点记录
vue-cli2和vue-cli3(vue-cli4)的一些区别据我目前的了解,创建vue项目,vue-cli不是必须的,但是在实际开发时,几乎就是必须的。vue-cli既可以看做是一种创建vue项目的快捷工具,也可能理解成是vue的一种规范。由于本机的vue-cli安装较早,还是vue-cli2的版本,而如今早已经是vue-cli4,所以也是时候进行一定的升级了,升级过程以及升级之后的部分区别...原创 2020-03-01 13:00:40 · 3737 阅读 · 4 评论 -
tzxblog博客系统-接口文档
V1.0接口安全说明所有接口需要实现签名,前台向后台发起请求前需要在header中添加签名参数和签名,以减少后台服务器的被攻击可能性。签名参数至少包含url、时间戳,有token的接口也需要对token签名,以参数名首字母排序后使用&符号拼接后,进行rsa256算法签名。环境说明环境名称协议IP/域名端口私钥开发环境HTTP127.0.0.180...原创 2020-02-02 16:32:18 · 2009 阅读 · 0 评论 -
tzxblog博客系统-概要设计
v1.0系统概述tzxblog博客系统旨在创建一个可持续迭代的,以博客系统为基础并辅以文件下载、论坛讨论、商城等功能为一体的综合性站点。重在持续性迭代,巩固工作中主流技术的同时,练习工作中未使用但主流或者不可或缺的技术。整体架构系统整体采用前后台分离思想,后台以springboot为基础框架,前台以vue为基础技术,辅以redis缓存、mysql存储、nginx转发以及ssl通信,力...原创 2020-02-01 10:37:18 · 2696 阅读 · 0 评论 -
tzxblog博客系统-需求及立项说明
v1.0项目背景这是一个模拟的博客系统,利用业余时间开发,旨在巩固整个软件开发周期内的各项流程,以开发技术练习为主,文档和工具练习为辅。力求重要的流程都有文档可以追溯、关键的技术点都有笔记进行记录。由于之前实现的功能选择的部分技术并非主流,因此本次算是对原项目的优化和重构。再由于之前并没有完整的流程,因此本次实际也可以看成是一个全新的项目。项目流程说明项目预计可练习的流程有:需求和...原创 2020-01-30 17:11:54 · 2962 阅读 · 0 评论 -
oauth2模式理解笔记
oauth2这个词,很多java开发应该都不陌生,但是真的好好了解过、理解过的可能并不多,理解清楚的可能就更少了。由于近期多个业务中遇到相关需求,便不得不特意系统性的了解了一番,却不知道理解的是否正确,做记录的同时也算是求证。oauth2本身分为授权和认证两块,是有区别的,本身可以分开。只是大多数时候为了方便,认证和授权混在了一起,或者说是交给了同一个系统处理。oauth2有四种授权模式,简...原创 2019-12-18 22:07:11 · 1455 阅读 · 0 评论 -
记软件开发满五年(二)——盘点这些年的改变
前言人生从来就不是单一和乏味的,总是充满着理性和感性。作为一个喜欢文科的人,我应该是比较感性的,但是作为一个程序员,我似乎更多的是应该保持理性。感性容易引起别人的共鸣,而理性更应该拿数据说话,也许显得有些无趣,却可能更有实用的价值。行业的改变五年来,我经历了三家公司,也可以说是两家。前两家都是外包给移动,后边这一家是外包给联通。乍一看,似乎我一直从事的都是电信行业,但实际上并不是,我只...原创 2019-11-15 00:11:26 · 2725 阅读 · 12 评论 -
file和file文件流
**io流是程序中比较常用的功能,基本上涉及到文件上传下载的都要用到这功能,比如上传头像,上传附件等等。 对于一个java程序员来说,io流也是必须掌握的,因此这里对比较常用的或者说曾经用过的方法进行简单的归纳和总结。**对于io流,百度百科的解释是: 流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,原创 2016-07-20 12:13:29 · 4473 阅读 · 2 评论 -
java常用字节流
常用的字节流有FileInputStream和FileOutputStream、BufferedInputStream和BufferedOutputStream、DataInputStream和DataOutputStream。FileInputStream和FileOutputStream是基础的字节输入和输出流,通常在创建缓冲流时需要使用到,也可以用来做文件复制的功能。 * fileInput原创 2016-07-21 09:55:57 · 2933 阅读 · 0 评论 -
java程序调用xfire发布的webService服务(二)
在上一篇的调用xfire发布的webService服务中,我只是从服务端返回了一个字符串给客户端,却没有测试从客户端传递数据给服务端。而实际应用中一般是不太可能只出现这样的应用场景的,因此我便更进一步测试了客户端传递数据给服务端。因为相关的jar包在上一篇已经说过,因此便不再重复说明,这次的测试步骤如下:一、测试向服务端传递字符串(重点在第二个): 为了进一步理解服务搭建,我重新写了一个服务原创 2016-06-08 13:02:36 · 6364 阅读 · 0 评论 -
java定时任务(三):timerTask定时任务
这种方式是纯粹的java代码,需要继承timerTask接口并重写run方法,创建这个类的时候就会调用run方法。基本的使用逻辑是:把自己需要处理的业务逻辑放在自己写的这个继承了timerTask的类中,然后new一个timer并调用schedule方法,在schedule中设定一个新的自己类的对象为参数,同时配置其他时间信息,示例如下:package scheduleTe原创 2016-06-03 13:03:36 · 3479 阅读 · 0 评论 -
java Socket实现简单在线聊天(三)
在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊。在实现客户端转发,无非就是增加输出流;而之前客户端都只发不收,这里也需要更改客户端达到循环接收服务端消息的目的,因此也需要实现多线程。在实现这个功能的时候,偶然想起随机生成验证码的功原创 2016-05-19 18:08:12 · 12160 阅读 · 0 评论 -
java Socket实现简单在线聊天(二)
接《javaSocket实现简单在线聊天(一)》,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程。每当有一个新的客户端连接上来,服务端便需要新启动一个线程进行处理,从而解决之前的循环读取中造成阻塞的问题。写线程通常有两种方法,集成Thread或者实现runnable接口,原则上是能实现runnable的情况下就不继承,因为实现接口的方式更加灵活。原创 2016-05-19 17:51:58 · 5981 阅读 · 0 评论 -
java Socket实现简单在线聊天(一)
最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下。我计划的大致实现步骤分这样几大步:1、使用awt组件和socket实现简单的单客户端向服务端持续发送消息;2、结合线程,实现多客户端连接服务端发送消息;3、实现服务端转发客户端消息至所有客户端,同时在客户端显示;4、把awt组件生成的窗口界面改成前端jsp或者html展原创 2016-05-18 12:20:31 · 12819 阅读 · 4 评论 -
cookie、session和java过滤器
基础知识理解:cookie、session和过滤器通常都是用在web应用中,cookie和session用来保存一定的数据,过滤器Filter则是在浏览器发出请求之后,而后台执行特定的请求之前发生一定的作用。之所以把这三个放一起,是因为有很多时候都会是把他们结合在一起使用,例如有些登陆程序。cookie是浏览器的机制,session是服务器的机制,但是实际上cookie原创 2016-05-15 21:17:43 · 6752 阅读 · 0 评论 -
calendar中set方法和静态属性带来的坑
坑在哪里:在我之前接触的一个项目中涉及到这么一项功能:每天00:00:00把某些数据移动到mongodb数据库的另一个集合中,也就是关系型数据库的表中。这个集合名是一个固定的名称加上当前的两个月前的日期所在的年和月份。这个功能是在我接触这个项目之前就已经存在,也就是之前的同事实现的功能,写了一个java的定时任务。那个同事如今已经不在我们公司了,但是最近却发现这原创 2016-05-13 12:23:14 · 4086 阅读 · 3 评论 -
java程序转换excel中科学记数法的数据为date类型
今天出于某些原因从mongodb数据库中导出了一些数据,为了更直观的发送给其他人查阅,便使用mongoVUE的导出为excel功能。但是导出后出现了一个问题,里边有一列存储时间的,存储的是long型毫秒数,在导出后就自动变成了科学记数法。且不说从科学记数法中辨别出实际时间,即便是原本的毫秒值也是不易于辨别的,但是这些long值不能直接在excel中转换成date类型,因此我原创 2016-05-12 17:59:14 · 3120 阅读 · 0 评论 -
JAVA代码发送邮件示例和解释
下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,好在昨晚终于走通代码成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:package test;import java.util.ArrayList;import java.util.Date;import原创 2016-05-12 09:15:59 · 4433 阅读 · 2 评论 -
servlet简单用法和配置示例及说明
学习原因和目的:我如今所接触的项目都是bs模式的web应用,而里边基本上都是用的spring MVC和前台交互,servlet貌似用的很少。但是即便是用spring和spring MVC,项目中依旧是少不了web.xml文件,而这里边的配置看来看去根本就是servlet的配置。因此为了更好的理解这些配置,我想还是需要从servlet入手。se原创 2016-05-06 18:47:41 · 14057 阅读 · 2 评论 -
Date和Calendar时间操作常用方法及示例
package test;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/*** Date和Calendar常用方法,Date很多方法已经弃用,因此以Calendar为主** @author tuzongxun123*原创 2016-05-03 10:09:15 · 6625 阅读 · 0 评论 -
Java使用poi操作cexel
java操作excel比较简单,但是时间长了就会忘记,因此基本的简单操作做个记录。依赖poi的jar包,pom.xml配置如下:<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/原创 2016-04-29 18:48:03 · 8632 阅读 · 0 评论 -
java中用中国网建提供的SMS短信平台发送短信
接下来的项目需求中提到需要短信发送功能,以前没有做过,因此便在网上搜了一下。大体上说的都是有三种方法,分别是sina提供的webservice接口、短信mao和中国网建提供的SMS短信平台。 这三种方式,因为第一种和第三种都经过了别的平台转发,因此具有一定的安全隐患,第二种短信mao的方式相对可能要安全一些。 但是短信mao需要购买硬件设备,因此我便只好参考网上的文章先实现了用sm...原创 2016-04-13 20:43:49 · 5422 阅读 · 13 评论 -
程序包com.sun.image.codec.jpeg不存在 问题的完美解决
原文地址:http://my.oschina.net/zb0423/blog/86507在使用Hudson进行打包的过程中,因为我们使用了一个pdf文件产生缩略图的功能,倒置添加的源码文件在maven下面编译失败,失败提示信息为:程序包com.sun.image.codec.jpeg不存在 后来查看这个类文件的位置在jre/lib/rt.jar而我们设置的java_ho转载 2016-03-14 13:11:30 · 4858 阅读 · 0 评论