★JAVA学习之路★
文章平均质量分 84
土豆是我的最爱
这个作者很懒,什么都没留下…
展开
-
小票智能审核项目总结介绍
好久没写文章了,总结一下在公司负责的一个花费精力比较多的项目:小票智能审核系统。文章目录前言一、背景二、项目初期1.OCR服务2.结构化服务结构化要求结构化方式Python的结构化服务Java的机构化服务行数据规整总结前言在新的公司也呆了快两年了,是新零售性质的公司,公司会接很多品牌的需求,我们这个团队主要是小票相关的活动。小票活动基本流程都是消费者上传购物小票–>初审录入小票信息–>复审小票信息–>发奖,看着是比较简单,但是其实整个业务流程还是比较复杂的,涉及到各种微信API原创 2022-05-13 16:36:12 · 768 阅读 · 0 评论 -
记录第一次参与高并发场景业务
目录业务场景项目难点1.发券并发问题2.支付宝技术对接3.服务器升级繁琐4.线上并发问题解决方案1.发券并发问题2.redis队列3.线程池异步4.多实例负载均衡项目收获业务场景上上周新启动了一个项目,是和支付宝合作的,活动流程大概是这样:支付宝侧会开发一个H5活动——品牌密室,用户可以在支付宝中搜到该活动,然后进行游戏互动,游戏后就可以领取券码,关注并进入生活号中进行券码的查看以及门店核销。我负责的部分主要是在用户领券并进入生活号的时候,我会收到支付宝的订阅消息请求,其中有支付宝用户id及其他信息,原创 2020-09-02 15:50:47 · 1224 阅读 · 0 评论 -
全球国家信息xml文件数据提取
今天项目中遇到一个需求,就是可以对全球国家地区进行选择。那么要么就是数据库字典表,要么就是读取本地文件。这里我们选择读取本地文件,包含中英繁三种语言的文件,可在我的资源中下载。首先引入依赖包<dependency> <groupId>dom4j</groupId> <artifactId&g...原创 2020-03-31 10:23:36 · 1368 阅读 · 0 评论 -
小白都能看得懂的java回调
故事背景在日常编程中,我们经常需要对内存的数据进行持久化的工作,把他们保存在硬盘文件或者数据库中。为了避免重复, 我们通常会把这部分工作封装在一个工具类中, 让各个客户端来调用。下文的FileIO就是一个简单的工具类(为了简单起见,并没有使用单例或静态方法来实现)小张的烦恼Java 帝国的FileIO是一个忙碌的家伙,附近7、8个村落的人都来找他, 请他把数据存储到硬盘里。...转载 2019-12-16 16:09:08 · 1903 阅读 · 5 评论 -
小白都能看懂的java泛型
一、什么是泛型泛型是Java SE 1.5的新特性,可以适应不同的很多很多类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。二、为什么使用泛型1.使用泛型能写出更加灵活通用的代码2.泛型将代码安全性检查提前到编译期 使用泛型后,能让......原创 2019-12-14 21:00:43 · 4712 阅读 · 14 评论 -
Spring IOC?彻底搞懂它!
目录引言BeanFactory 简介创建 Bean 容器前的准备工作创建 Bean 容器,加载并注册 BeanBean 容器实例化完成后准备 Bean 容器: prepareBeanFactory初始化所有的 singleton beans附录id 和 name配置是否允许 Bean 覆盖、是否允许循环依赖profile工厂模式生成 BeanFa...转载 2019-12-09 15:31:51 · 1785 阅读 · 2 评论 -
小白都能看懂的电商系统jvm参数设置简单优化
前言通过上篇文章小白都能看得懂的java虚拟机内存模型我们已经基本了解了jvm的内存模型,并且通过一个jvm案例分析了程序运行中JVM的内存活动。我们学习jvm是为了什么,为了面试么,当然是一部分,但是真正学习jvm的底层原理,一定是为了调优。那么jvm调优到底是调什么呢,目的是什么呢?Stop-The-World 不知道同学们有没有听过SWT,意思是Stop-Th......原创 2019-12-03 17:28:06 · 2580 阅读 · 7 评论 -
小白都能看懂的java虚拟机内存区域划分
目录一、虚拟机二、虚拟机组成1.栈栈帧2.程序计数器3.方法区对象组成4.本地方法栈5.堆GCGC案例一、虚拟机同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的。同一个java代码在windows上生成的机器码可能是0101.......,在linux上生成的可能是1100.......原创 2019-11-26 17:21:27 · 49432 阅读 · 152 评论 -
【docker】——docker项目中使用phantomjs实现网页快照缩略图
前言前面有写博文,利用phantomjs实现网页快照,分别适配windows,linux,mac,好不容易搞好了,结果把项目镜像放到docker运行容器的时候,居然失效了。docker内部不也是linux内核么,居然会出问题。找了半天,发现是docker中很多库不兼容可能,不能运行phantomjs命令。想了很多办法,比如更换类库,但是已更换会出现连锁反应,其他一个一个都要换,明显不行。很久才...原创 2019-11-07 17:55:32 · 3529 阅读 · 1 评论 -
【PhantomJs】——利用phantomjs实现网页快照的两种方式
前言今天遇到一个需求,是前端给后台一个网址,后台需要返回这个网址的快照回去,刚接手的时候一脸懵,了解了一下,是项目中有个播放视频或者直播的区域,需要一张图片来作为封面图,但是如果专门去存的话不方便,也不灵活。既然有需求,那就只能找方法了,网上各种翻阅,方法不多,也不算少,但是很杂,很多工具及代码都有不足之处,有的比较慢,有的是会出现可视化的工具框,比如IFrame,显然不好,最后确定了用p...原创 2019-10-28 20:46:22 · 3223 阅读 · 1 评论 -
【docker】——docker-compose部署springboot镜像项目
前言最近项目要上线喽,经理让我自己在电脑上搭建docker练练手,虽然连docker都没弄明白,也只能硬着头皮慢慢搞,不过确实对docker理解加深了,这里先记录一下,后期再整理吧Docker安装:windows10专业版、企业版、教育版都可以安装docker for windows,这个应该是比较好的,官方是说是windows的最好选择,但是我按照网上的教程装了好几遍,运行一直有问题,每次...原创 2019-10-18 17:17:50 · 2485 阅读 · 1 评论 -
【String】——String,StringBuffer,StringBuilder的区别
阅读此文前最好预习String源码分析及AbstractStringBuilder源码分析通过解读三者源码便可分析如下区别:1.String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组.但是String里面的char数组是final的,而StringBuffer,StringBuilder不是,也就是说,String是不可变的,想要新的字符...原创 2018-11-11 15:08:40 · 7008 阅读 · 0 评论 -
【JUC】——volatile解析
一.内存模型的相关概念计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里...转载 2018-09-10 23:50:26 · 8959 阅读 · 0 评论 -
【Map】——LinkedHashMap
一. LinkedHashMap 概述HashMap 是 Java Collection Framework 的重要成员,也是Map族(如下图所示)中我们最为常用的一种。不过遗憾的是,HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便,因为在有些场景中,我们确需要用到一个可以保持插入顺序的M...原创 2018-09-15 21:28:26 · 8302 阅读 · 1 评论 -
【Native】——关键字Native
一、概念native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(java Software D...原创 2018-11-08 14:42:15 · 7490 阅读 · 0 评论 -
【学习之路】——JDK源码阅读顺序
很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。标题为包名,后面序号为优先级1-4,优先级递减1、java.lang1) Object 12) String 13) AbstractStringBuilder 14) StringBuffer 15) StringBuilder 16) Boolean 27...转载 2018-11-08 15:00:51 · 6588 阅读 · 0 评论 -
【学习之路】——JAVA工程师推荐书单
浏览CSDN时无意看到大神推荐的java方向的书单,可谓福音,特转来与各位分享!一、Java-1年1、Java编程思想2、深入理解Java虚拟机3、Effective Java4、HTTP权威指南5、深入分析javaweb技术内幕6、Spring实战7、面向对象分析与设计8、设计模式其实很简单二、Java-2年1、Java并发编程实战2、J...转载 2018-11-08 15:12:13 · 9002 阅读 · 0 评论 -
【String】——java.lang.String源码分析
java.lang.String是使用频率非常高的类。要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的一、String类String类是被final所修饰的,所以不允许被继承和修改,String类实现了Serializable、Comparable、CharSequence这三个接口,Serializable接口使得String可序列化;Comparabl...原创 2018-11-08 17:13:54 · 7300 阅读 · 0 评论 -
【注解】——@Deprecated
在看java.lang.String的源码时,看到一个陌生的注解外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加 @Deprecated 注解,并清晰地说明采用的新接口或新服务是什么。这其中提到了 @Deprecated 注解,在之前的开发过程中没遇到过这个注解,于是查了下他的功能:简单来讲就是,若某类或某方法加上该注解之后...原创 2018-11-09 09:36:18 · 7343 阅读 · 0 评论 -
【前端】——Ajax
一、同步请求和异步请求先解释一下同步和异步的概念:同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。同步请求:客户端请求(等待)->服务端处理->响应->页面载入 (缺少对象:XMLhttpRequest)这时候如果有错误,只能再次发送请求,再次等待...原创 2018-09-10 20:58:55 · 8958 阅读 · 0 评论 -
【Spring】——Spring及SpringMVC运行流程
一、Spring的启动过程 (1). 对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境; (2). 在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到...原创 2018-09-10 20:10:51 · 8379 阅读 · 0 评论 -
【JVM】——GC机制
前言JVM内存主要由两部分组成:a.线程私有内存区域;b.线程公共内存区域。线程公用的内存区域主要包括:堆、方法区线程私有的内存区域主要包括:jvm栈、程序计数器、本地方法栈如需了解JVM内存结构相关知识,请移步JVM内存结构详解一、GC机制 随着程序的运行,内存中的实例对象、变量等占据的内存越来越多,如果不及时进行回收,会降低程序运行效率,甚至引发系统异常...原创 2018-09-04 00:00:57 · 8953 阅读 · 0 评论 -
【异常】——ConcurrentModificationException
前言在对一个list进行循环,将其中一些元素从list中移除时:在此之前先弄清楚一些相关的知识。Fail-Fast机制快速失败也就是fail-fast,它是Java集合的一种错误检测机制。java.util包中的集合类都有 fail-fast 检测,如果fail-fast迭代器检测到在迭代过程中进行了更改操作,那么它会抛出 ConcurrentModificationEx...原创 2019-08-12 16:54:31 · 5726 阅读 · 0 评论 -
【支付】——毕业设计中利用websocket做模拟支付
前言最近在做公司项目时使用websocket在支付回调接口中刷新页面状态时,忽然想起今年毕业做毕业设计的时候,做的是一个电商系统,那么支付是必不可少的,当时还没有听说过websocket,去网上查阅资料,申请支付宝或者微信授权肯定是不现实的,还搞了很久的沙箱支付,现在想想真是傻,没有早一点接触到websocket,至于websocket是一门怎样的技术我们在此不做过多介绍,大家可自行查阅资料,......原创 2019-09-21 19:36:35 · 6067 阅读 · 3 评论 -
【短链接】——自己实现一个短网址服务
目录前言什么是短链接为什么要用短链接(引用)如何生成短链接实现代码演示前言前段时间做支付的时候,要生成可供微信和支付宝扫描的支付二维码,二维码里存储的也就是一个链接,但是可能是因为链接比较长的缘故,总是被微信拦截。然后就换成了微信官方的长链接转短链接,好不容易弄好了,发现支付宝扫的话会拦截,两家果真是水火不容。。。有问题就解决问题呗,那我换成第三方的好...原创 2019-09-23 14:32:11 · 5962 阅读 · 6 评论 -
【面向对象】——OOP思想
1.面向对象是面向过程而言.两者都是一种思想。 (1)面向过程:强调的是功能行为。(强调过程、动作) (2)面向对象:将功能封装进对象,强调了具备了功能的对象。(强调对象、事物) (3)面向对象是基于面向过程的。将复杂的事情变简单了。 (4)面向过程-->面向对象:执行者-->指挥者 (5)打个比方:面向过程,自己造电脑。面向...原创 2018-08-27 23:50:35 · 8632 阅读 · 2 评论 -
【JVM】——内存结构
一、JVM启动流程:JVM启动时,是由java命令/javaw命令来启动的。二、Java的内存结构:JVM基本结构图:JVM内存结构主要有三大块:堆内存、方法区和栈。1.堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;...原创 2018-08-29 09:15:25 · 9942 阅读 · 0 评论 -
【JVM】——类的加载机制
一、什么是类的加载(1)类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。(2)类加载器并不需要等到某个类被...原创 2018-08-29 09:29:41 · 8292 阅读 · 1 评论 -
【SpirngCloud】——服务注册与发现实现原理
服务注册与发现的实现原理:1.服务发现组件(1).首先,当服务启动的时候,服务消费者和服务提供者都会把自己的IP和端口注册到服务发现组件中,当服务消费者需要使用的时候,他会从服务发现组件的维护的表中,进行查找服务提供者的ip和端口(2).所有的服务都可能会down掉,那么这里涉及到一种心跳机制,也就是服务发现组件会给服务发送心跳包,如果连续3次发送的心跳包都没有得到回应,服务发...原创 2018-09-02 14:58:32 · 9586 阅读 · 1 评论 -
【并发】——ThreadLocal解析
一.ThreadLocal是什么 ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的一个局部变量。 每个Thread线程内部都有一个Map。 Map里面存储线程本地对象(key)和线程的变量副本(value) 但是,Thread内部的Map是由ThreadLocal维护的,由Threa...原创 2018-09-02 23:40:58 · 8934 阅读 · 1 评论 -
【Serializable】——序列化和反序列化
一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。serialization 序列化 : 将对象转化为便于传输的格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。deserialization 反序列化:将序列化的数据恢复为对象的过程。就像淘宝上买一个大件,运输的时候当然到拆分...原创 2018-11-12 11:00:50 · 6769 阅读 · 0 评论 -
【学习路线】——JAVA工程师成神之路
分享一位大佬的博客,对于一名比较迷茫java工程师确实是比较好的学习路线,特转来,忘共勉一、基础篇JVMJVM内存结构堆、栈、方法区、直接内存、堆和栈区别Java内存模型内存可见性、重排序、顺序一致性、volatile、锁、final垃圾回收内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定JVM参数及调优Java对象模型oop-klass、对象头...转载 2018-11-13 10:08:41 · 7227 阅读 · 4 评论 -
【克隆】——Object类clone方法彻底剖析
一、什么是克隆克隆就是依据已经有的数据,创造一份新的完全一样的数据拷贝。在Java中对象的克隆有深克隆和浅克隆之分。有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的。基本数据类型存储在栈中,引用数据类型存储在堆中。二、为什么要克隆克隆的对象可能包含一些已经修改过的属性,保留着你想克隆对象的值,而new出来的对象的属性...原创 2018-11-16 14:14:29 · 8108 阅读 · 3 评论 -
【异常】——JAVA之全局国际化异常处理
前言在项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。一、自定义异常...原创 2019-07-25 11:12:43 · 8868 阅读 · 1 评论 -
【面试】——session和cookie 区别
session原理:1、session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大2、浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值, 创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器3、浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的...转载 2019-07-26 11:49:01 · 6593 阅读 · 6 评论 -
【Tomcat】——纯手写实现一个简单的Tomcat
前言心血来潮,记得上大学时老师曾经简单讲过Tomcat底层的实现原理,并给我们演示过简单的实现,趁着刚毕业还没有全部忘记,回温一下记录在这里,在这里纯底层实现一个简单可以访问静态文件以及动态请求的Tomcat服务器。实现功能:1:静态资源请求2:动态请求处理3:session及cookie信息存储,为方便下文的理解不了解的同学可以先自行了解一下session和cookie...原创 2019-07-26 16:57:16 · 7459 阅读 · 10 评论 -
【开发手册】——这些规约你遵守了么?
前言《Java开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续...原创 2019-07-30 18:42:28 · 7469 阅读 · 0 评论 -
【Java8新特性】——Lambda表达式
前言从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能。 很长一段时间java被吐槽是冗余和缺乏函数式编程能力的语言,随着函数式编程的流行java8种也引入了 这种编程风格。一、lambda简介什么是lambda?lambda表达式是一段可以传递的代码,它的核心思想是将面向对象中的传递数据变成传递行为。 我们回顾一下在使用java8之前要...原创 2019-07-31 18:43:40 · 7422 阅读 · 3 评论 -
【Java8新特性】——Streams API 详解
一、为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于...转载 2019-08-01 12:50:15 · 6353 阅读 · 0 评论 -
【JUC】——乐观锁、悲观锁及乐观锁实现CAS机制
首先介绍一些乐观锁与悲观锁:悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都...转载 2019-08-12 14:58:09 · 6192 阅读 · 1 评论