自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

转载 SparkCore的调优之开发调优

开发调优调优概述Spark性能优化的第一步,就是要在开发Spark作业的过程中注意和应用一些性能优化的基本原则。开发调优,就是要让大家了解以下一些Spark基本开发原则,包括:RDD lineage设计、算子的合理使用、特殊操作的优化等。在开发过程中,时时刻刻都应该注意以上原则,并将这些原则根据具体的业务以及实际的应用场景,灵活地运用到自己的Spark作业中。原则一:避免创建重复的RDD通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始

2021-01-31 21:38:05 54

原创 【Java】反射调用与面向对象结合使用产生的惊艳

我在看Spring的源码时,发现了一个隐藏的问题,就是父类方法(Method)在子类实例上的反射(Reflect)调用。初次看到,感觉有些奇特,因为父类方法可能是抽象的或私有的,但我没有去怀疑什么,这可是Spring的源码,肯定不会有错。不过我去做了测试,发现确实是正确的,那一瞬间竟然给我了一丝的惊艳。这其实是面向对象(继承与重写,即多态)和反射结合的产物。下面先来看测试,最后再进行总结。友情提示:测试内容较多,不过还是值得一看。具体方法的继承与重写先准备一个父类,有三个方法,分别是publ.

2021-01-30 21:51:10 65

转载 一个资深程序员对Java泛型的看法

Q:什么是泛型?Java泛型本质:参数化类型从字面意思就可以看出,就是把“类型变成了参数”,如String类型、Integer类型等都作为参数。=================================================================泛型-承担“保安”的角色Q:泛型如何使用?1.List mylist1=new ArrayList();//未使用泛型;2.List mylist2=new ArrayList();//参数化类型;集合类容纳的对象都是

2021-01-30 21:33:51 112

转载 Java 模拟servlet执行、DTD约束、Schema约束、dom4j解析

`模拟servlet执行浏览器请求WEB服务器上的资源,WEB服务器返回给浏览器浏览器的入口不同(访问路径),访问的资源也不同。我们需要使用xml约束(DTD或schema);为了获得xml的内容,我们需要使用dom4j进行解析。XML(不同路径(/hello)执行不同的资源( HeIIoMyServlet))XML可扩展的标记语言 标签可自定义的包下创建xml 文件 new → other → XMLFile粘贴web-app_ 2_ 3.dtd文件复制web-app_ 2_ 3

2021-01-26 22:28:10 129

转载 Java开发之上班摸鱼!写最少的代码!

I 前言 本次分享一下我所知道的如何写最少的代码的小技巧,如果你有更好的方案,欢迎在评论区留言,方案很棒的话,加我交流圈,为你送上冬天的一杯奶茶~Java:我想返回多个返回值秀一下Go的多返回值:package mainimport "fmt"// 返回 X + Y 和 X * Yfunc Computer(X, Y int) (int, int) { return X + Y, X * Y}众所周知,Java仅支持单一返回值,一般情况下如果需要返回多个对象,我们.

2021-01-26 22:27:18 367

转载 看阿里大佬如何深入剖析Java中的transient关键词

1. transient的作用实体类实现了Serilizable接口,就可以被自动序列化,然后有些特殊字段如密码,金钱等不想被序列化就可以使用transient关键词来解决。transient修饰的是变量,不能修饰方法和类。静态变量不能被序列化,不能被序列化的意思的序列化进去和反序列化出来的值可能不是你想要的,而是jvm中当前的值。具体的demo可以参考上面链接里的例子,被transient修饰的字段不是不序列化了,只是反序列化回来后得到的是null。 View Code输出结果:read a

2021-01-26 22:26:31 75

转载 原来是这个导致 java 代码的运行效率low到爆了

代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。代码优化的目标是减小代码的体积提高代码运行的效率代码优化细节1、尽量指定类、方法的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定fin

2021-01-26 22:25:42 193

原创 深入解析Java中的锁分类

在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可

2021-01-25 22:44:09 72

原创 Java使用Jetty实现嵌入式Web服务器及Servlet容器

首先来介绍下 Jetty,根据 wiki 的介绍:Jetty 是一个纯粹的基于 Java 的网页服务器和 Java Servlet 容器。尽管网页服务器通常用来为人们呈现文档,但是 Jetty 通常在较大的软件框架中用于计算机与计算机之间的通信。Jetty 作为 Eclipse 基金会的一部分,是一个自由和开源项目。该网页服务器被用在 Apache ActiveMQ、Alfresco、Apache Geronimo、Apache Maven、Google App Engine、Eclipse、FUSE

2021-01-23 22:47:56 296

原创 唬人的Java泛型并不难

泛型public interface Foo {}public interface Bar {}public interface Zar<?> {}上面的代码有什么区别?泛型初探1、为何引入泛型?Java 泛型也是一种语法糖,使用泛型可以在代码编译阶段完成类型的转换,避免代码在运行时强制转换而出现ClassCastException的异常。网络搜索出来一大堆的名称解释,我们先看英文Generic type,从英文大概也能明白,Generic 这里可以理解为普通的,一般的,或者我们

2021-01-22 21:49:12 78

原创 Java while循环中嵌套if

##java的三种循环结构与循环嵌套循环结构:语法,及执行顺序语法: while(boolean类型){ //功能语句 }执行顺序:1断小括号中的值是否为true,如果为true,执行功能语句2行完功能语句,继续判断小括号中的值,如果为true,继续执行功能语句3直到判断小括号中的值为false,跳出循环注意事项:while小括号中写值true死循环while小括号中写false错误

2021-01-21 21:53:24 1376

原创 一分钟教会你Java 条件语句 - if...else

一个 if 语句包含一个布尔表达式和一条或多条语句。##语法####if 语句的语法如下:if(布尔表达式){ //如果布尔表达式为true将执行的语句}如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。\Test.java 文件代码:public class Test { public static void main(String args[]){ int x = 10; if( x &lt.

2021-01-21 21:52:25 188

原创 推荐初学者练习的 Java 实战项目

对于JAVA的新手来说,需要结合着相关书籍的学习和开源项目一起,才能达到比较好的效果。 在此推荐一些轻量级适合入门的JAVA开源项目,希望对题主的学习有所帮助。项目名称:springboot-learning-example项目简介:spring boot 实践学习案例,是 spring boot 初学者及核心技术巩固的最佳实践。项目地址: springboot-learning-example.项目名称:DockerFly项目简介:Dockerfly是基于 Docker1.12+ (D

2021-01-21 21:50:54 621

原创 浅谈Redis五种数据结构的底层原理

概念Redis作为一个开源的用C编写的非关系型数据库,基于优秀的CRUD效率,常用于软件系统的缓存,其本身提供了以下五种数据格式:string:字符串list:列表hash:散列表set:无序集合zset:有序集合接下来我们就要针对这五种数据结构,来分析其底层的结构这里选用的版本是redis-5.0.4,所以可能有很多地方和如今网络上的其他博文不太一致,不同的地方我会在文中指出string因为redis使用c语言开发,所以自然没有java和c++的那些字符串类库,在redis中,其自

2021-01-21 21:45:38 93

原创 java基础之java输入输出语句

1、使用Scanner使用时需要引入包importjava.util.Scanner;首先定义Scanner对象Java基础学习:java输入输出语句比如:Java基础学习:java输入输出语句2、使用BufferedReader用前需要引入importjava.io.Reader;Java基础学习:java输入输出语句比如:Java基础学习:java输入输出语句应该注意的是:Java把从键盘输入的数据一律看作是字符串,因此若要从键盘输入并让系统认可是数值型数据,必须经过转换。

2021-01-21 21:43:58 455

原创 时耗五天,打造让面试官惊呆的个人主页

写这篇文章的目的是想总结一下自己学习Java,和找工作的一些心得体会,主要是和提升技术,以及增加面试通过相关的,这些都是刚刚入门的Java程序员和打算入Java开发这个行当的准新手们一定会遇到的问题,希望可以给大家一些经验,能让大家更好学习和使用Java。作为一个软件工程专业的毕业生,在我上学的时候对于我的专业成绩还是很自信的,要说名列前茅也不为过,在校也很努力,空闲时间都往图书馆跑,自己在课外还研究了多线程之类的。把我学过的都写在简历上,感觉在找工作的时候,作为应届生的我还是很有优势的。而且我隔.

2021-01-21 21:27:22 297 2

原创 java之collection总结

Collection来源于Java.util包,是非常实用常用的数据结构!!!字面意思就是容器。具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景。collection主要方法:boolean add(Object o)添加对象到集合boolean remove(Object o)删除指定的对象int size()返回当前集合中元素的数量boolean contains(Object o)查找集合中是否有指定的对象boolean isEmpty()判断

2021-01-20 16:53:39 99

转载 spring boot启动报错Error starting ApplicationContext(未能配置数据源)

主要错误:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.未能配置数据源:未指定“url”属性,也无法配置嵌入式数据源。Error starting ApplicationContext. To display the conditions report re-run your application with 'debug

2021-01-20 16:51:00 224

原创 该如何选择Java开发和嵌入式开发

首先,Java开发和嵌入式开发都是目前IT行业内比较常见的开发岗位,也都有大量的从业人员,所以从就业的角度来看,学习Java开发和嵌入式开发都是不错的选择。Java语言的应用领域包括Web开发、Android开发和大数据开发等领域,这些领域也都有大量的岗位需求。从行业发展趋势来看,随着5G标准的落地以及产业互联网的发展,未来物联网领域的发展前景将非常广阔,而嵌入式开发作为物联网开发的重要组成部分,必然会迎来更多的机会,从这个角度来看,嵌入式开发似乎未来的发展机会更多一些。相比于传统Java开发来说,

2021-01-20 16:44:15 413

原创 深入了解java并发之TimeUnit

TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过Thread.sleep(),当然我确信你这样做过,那么你一定熟知它是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有

2021-01-19 17:18:21 149

原创 一篇文章让你学会Java中的static

java中的static关键词Static基本规则:(1)一个类的静态方法只能访问静态属性。(2)一个类的静态方法不能直接调用非静态方法。(3)如果访问权限允许,static属性和方法可以使用对象加’.’方式调用,当然也可以使用实例加’.’方式调用。(4)静态方法中不存在当前对象,所以不能使用this,当然也不能使用super。(5)静态方法不能被非静态方法覆盖。(6)构造方法不允许被声明为static的。static关键词,可以加在方法上,成员变量上,代码块。 类就不要想了。1. s

2021-01-18 22:40:47 92

转载 架构师讲解Java中websocket的应用

这篇文章主要来介绍一下在java项目中,特别是java web项目中websocket的应用。场景:我做了一个商城系统,跟大多数商城系统,分为客户端和后台,客户端供客户浏览,下单,购买,后台主要管理商品,处理订单,发货等。我现在要实现的功能是,当客户端有客户下单,并且支付完成以后,主动推送消息给后台,让后台的人知道,好去处理发货等事宜。首先,我们要知道websocket是一个连接,这个连接是客户端(页面)与服务端之间的连接,所以我们要分两部分来完成这个连接,服务端代码和客户端代码。1.首先,在.

2021-01-18 22:36:16 266

原创 Java陷阱之assert关键字

Java陷阱之assert关键字一、概述在C和C++语言中都有assert关键,表示断言。在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。二、语法在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都 将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。assert关键字语法很简单,

2021-01-18 22:34:47 98

原创 深入解析Java 中 Gson的使用

JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等一、Gson的基本用法Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化;同时每个方法都提供了重载方法(1)基本数据类型的解析Gson gson = new Gson();int i = gson.fromJson("10

2021-01-18 22:20:55 217

原创 深入解析Java中Native关键字的作用

初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法:public native int hashCode();为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。一、认识 native 即 JNI,Java Native Interface凡是一种语言,都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接

2021-01-18 22:17:30 135

原创 【千行代码,bug无处藏】Java中的逆变与协变

看下面一段代码Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatchList<? extends Number> list = new ArrayList<Number>();list.add(new Integer(1)); //errorlist.add(new Float(1.2f)); //error

2021-01-16 21:43:15 126

原创 深入解析java中queue的使用

Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以

2021-01-16 21:41:16 222

原创 深入解析java中equals,hashcode和==

1、==java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。2.引用类型(类、接口、数组)当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见’=='是对栈中的值进行比较

2021-01-16 21:39:00 204

原创 深入剖析Java中的Filter过滤器

Java中的Filter过滤器 Filter简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行

2021-01-15 22:52:58 146

原创 深入解析Java中this和super的用法总结

这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~thisthis是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以分为3种:1.普通的直接引用这种就不用讲了,this相当于是指向当前对象本身。2.形参与成员名字重名,用this来区分:class Person { private int age = 10; public Person(){ System.out.pr

2021-01-15 22:41:25 82

转载 Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。Socket编程一、网络基础知识(参考计算机网络)1、两台计算机间进行通讯需要以下三个条件:IP地址、协议、端口号2、TCP/IP协议:是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族、或TCP/.

2021-01-15 22:27:47 138

转载 分布式锁的几种实现方式

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。在很多

2021-01-14 22:37:31 79

转载 java开发中sql注入正则表达式检测

sql拼装过程中有时候需要把特殊外部的参数拼装到sql语句中去,若不检测外部传入的参数是否含有sql关键词,黑客利用系统这个漏洞注入sql脚本语句进行数据库删除或盗取数据资料。sql关键词脚本检查正则表达式\b(and|exec|insert|select|drop|grant|alter|delete|update|count|chr|mid|master|truncate|char|Java语言/** * 是否含有sql注入,返回true表示含有 * @param obj * @retur

2021-01-14 22:32:56 546

原创 Java中new一个对象是什么过程???

Java中new一个对象的步骤:当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能 在常量池中能否定位到一个类的符号引用(即类的带路径全名),并且检查这个符号引用代表的类是否已被加载、解析和初始化过,即验证是否是第一次使用该类。如果没有(不是第一次使用),那必须先执行相应的类加载过程(class.forname())。在类加载检查通过后,接下来虚拟机将 为新生的对象分配内存 。对象所需的内存的大小在类加载完成后便可以完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划

2021-01-14 22:28:08 467

原创 Java编程详解JVM的Client模式与Server模式

概述JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。1. 当前是Client or Server?使用Java -version命令就能显示出当前虚

2021-01-14 22:19:18 405

原创 JVM内存模型、指令重排、内存屏障概念解析

在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器、运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要。否则,你很难搞清楚哪些操作是在并发先绝对安全的?哪些是相对安全的?哪些并发同步手段性能最低?valotile的二层语义分别是什么?等等。一、什么是重排序请先看这样一段代码public class PossibleReordering {static int x = 0, y = 0;static int a = 0, b

2021-01-13 22:54:38 165

原创 Java分布式之redis

1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。题外话:忽然

2021-01-13 22:49:05 221

原创 深入剖析Java之redis分布式锁实现

一、使用分布式锁要满足的几个条件:系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者NoSQL)同步访问(即有很多个进程同事访问同一个共享资源。没有同步访问,谁管你资源竞争不竞争)二、应用的场景例子管理后台的部署架构(多台tomcat服务器+redis【多台tomcat服务器访问一台redis】+mysql【多台tomcat服务器访问一台服务器上的mysql】)

2021-01-13 22:42:50 141

原创 深入解析之JVM角度看Java多态

首先,明确一下,Java多态的三个必要条件:1、 继承2、 子类重写父类方法3、 父类引用指向子类对象然后看一个例子package test.xing;class Father{ protected int age; public Father(){ age = 40; } //加入Java开发交流君样:756584822一起吹水聊天 void eat(){ System.out.println("父亲在吃饭");

2021-01-12 23:09:09 102

原创 Java中的throws、throw、try、catch、finally

throws、throw、try、catch、finally 分别代表什么意义?Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。try:指定一块预防所有“异常”的程序。catch:紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。thr

2021-01-12 23:06:51 170

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除