
Java基础
文章平均质量分 94
江夏、
关注微信公众号:1024笔记;可免费领取海量学习资源和资料
展开
-
从零开始学设计模式(十四):中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern)又被称为调停者模式。它定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。它是一种对象行为型模式。生活中最常见的例子就是租房中介是一种中介,如果我们想要租房可以通过中介和房东沟通,这时候其实并不需要知道对方是谁,也并不需要面对面,类似于电话、QQ、微信等等都是中介,能大大降低了沟通的复杂性。原创 2022-04-08 12:00:11 · 493 阅读 · 0 评论 -
从零开始学设计模式(十三):访问者模式(Visitor Pattern)
前面的几篇文章分别介绍了创建型设计模式和结构型设计模式,接下来的几篇文章将介绍行为型设计模式原创 2022-02-13 13:21:28 · 272 阅读 · 0 评论 -
从零开始学设计模式(五):建造者模式(Builder Pattern)
建造者模式的定义就是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象。原创 2021-12-17 23:10:03 · 237 阅读 · 0 评论 -
从零开始学设计模式(四):工厂模式(Factory Pattern)
工厂模式主要是为创建对象提供过渡接口来指向新创建的对象,以便将创建对象的具体过程屏蔽隔离起来,不会对客户端暴露创建逻辑,,从而达到提高灵活性的目的。原创 2021-12-07 20:19:19 · 1041 阅读 · 0 评论 -
从零开始学设计模式(三):原型模式(Prototype Pattern)
一起学习原型模式!!原创 2021-12-06 17:39:10 · 598 阅读 · 0 评论 -
Java正则表达式学习
作者的其他平台:| CSDN:https://blog.csdn.net/qq_41153943| 掘金:https://juejin.cn/user/651387938290686| 知乎:https://www.zhihu.com/people/1024-paper-96| GitHub:https://github.com/JiangXia-1024?tab=repositories 本文大概12688字读完共需25分钟01原创 2021-09-25 20:01:20 · 623 阅读 · 0 评论 -
从零开始学设计模式(一):什么是设计模式
作者的其他平台:| CSDN:https://blog.csdn.net/qq_41153943| 掘金:https://juejin.cn/user/651387938290686| 知乎:https://www.zhihu.com/people/1024-paper-96| GitHub:https://github.com/JiangXia-1024?tab=repositories 本文大概54原创 2021-09-25 09:35:38 · 273 阅读 · 0 评论 -
Java注解(Annotation)的基本原理以及实现自定义注解
在我们使用springboot的时候我们知道因为注解的存在,使得我们的开发变得格外的方便、快捷。之前的文章Spring常用注解大全,值得你的收藏!!!对于spring中各类注解也进行过介绍。然而注解也并不是因为spring框架的兴起才出现的,而是很早就已经在java中被使用。Java 注解(Annotation)又称 Java 标注,是从 Jdk1.5 开始被添加到 Java中 的。Java 中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编原创 2021-07-14 22:45:22 · 2201 阅读 · 3 评论 -
如何对Datatable类型的数据表进行行列转换
最近有个需求需要对查询到的datatable进行行列转换的处理,这里记录下自己的处理方式。 ///行列转换 /// private DataTable SwapTable(DataTable tableData) { int intRows = tableData.Rows.Count; int intColumns = tableData.Columns.Count; //转二维数组原创 2020-09-16 20:00:11 · 1242 阅读 · 0 评论 -
sql如何对某一个重复字段只取其第一个数据
最近需要写个存储过程对一些数据进行处理,需求类似于这样的:有一个张表(order)记录的是用户购买商品的数据,字段为用户id,用户购买商品的名称,购买时间,这样的话里面的用户id和商品名称肯定就会有重复数据,那么对重复的数据只需要取其第一条记录即可。那么这时候就可以对其使用下面的函数对数据进行分组排序ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)上面的函数表示根据COL1字段对数据进行分组,在分组内部再根据 COL2字段进行排序,而此函数计算的原创 2020-09-13 16:01:29 · 10649 阅读 · 0 评论 -
面试题系列之cookie和session的区别是什么
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户cookie存在本地的上的session是存在服务器上的通俗讲,Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。另外一个更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。Session...原创 2020-06-23 10:07:05 · 422 阅读 · 0 评论 -
面试题系列之接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
有一个面试四连击的题目:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?上面这个题目我们来慢慢的剖析一下。先从基本的概念说起。一、接口官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。又到了我最喜欢打比方的环节了:我们身边最常见的接口就是电脑的usb接口了。我们可以想想,我们电脑的usb接原创 2020-05-20 18:33:06 · 4163 阅读 · 3 评论 -
Eclipse启动报错:Java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer
今天打开Eclipse的时候,出现错误,详情见:D:\javaProjectOfEclipse.metadata.log路径的提示。打开日志文件,好长的一段错误日志:!ENTRY org.eclipse.osgi 4 0 2020-05-18 17:09:17.890!MESSAGE Application error!STACK 1java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer at org.eclips原创 2020-05-18 17:41:39 · 3094 阅读 · 2 评论 -
面试题系列之Servlet API中forward()与redirect()的区别
概念forward()与redirect()是servlet的两种主要的跳转方式。forward又叫转发,redirect叫做重定向。转发过程:客户浏览器发送http请求——>web服务器接受此请求—>调用内部的一个方法在容器内部完成请求处理和转发动作一>将目标资源发送给客户端;在这里,转发的路径必须是同一个web容器下的URL,其不能转向到其他的web路径上去,中间传递的 是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器原创 2020-05-14 20:38:39 · 864 阅读 · 0 评论 -
面试题系列之java中overload、override、overwrite的区别
1、overloadOverload的中文意思是重载,它表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同,即参数的个数或类型至少有一个不同,但返回值和方法属性必须相同。在调用的时候,VM就会根据不同的参数列表,来执行对应的合适的方法。比如:public class Demo4 { public static void main(String[] args) { Demo4 demo4 = new Demo4(); demo4.say(); demo4.say("你好原创 2020-05-12 11:01:48 · 1350 阅读 · 0 评论 -
面试题系列之使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
使用final关键字修饰一个变量时,是指引用变量不能变,但是引用变量所指向的对象中的内容还是可以改变的。public class Demo2 { //声明一个final关键字修饰的字符串 public static final StringBuffer sb = new StringBuffer("abc"); public static void main(String[] args) { // TODO Auto-generated method stub //sb指向新的引用对象原创 2020-05-09 15:19:38 · 1399 阅读 · 1 评论 -
面试题系列之short s1= 1; s1 = s1+1 和short s1 = 1; s1 += 1;有什么区别
对于short s1= 1; s1 = s1+1因为1是int类型,而等号左边的s1是short类型,由于s1+1运算时会自动提升表达式的类型,所以运算的结果是int型,再赋值给 short类型s1时,编译器将报告需要强制转换类型的错误,所以需要进行强转。对于short s1= 1; s1 += 1;在java中+=的作用包含两个部分,除了基本的加法运算功能之外,还可以隐形转换改变结果的类型,将计算结果的类型转换为“+=”符号左边的对象的类型。所以可以正确编译...原创 2020-05-09 11:00:18 · 315 阅读 · 0 评论 -
面试题系列之一个".java"源文件中是否可以包括多个类(不是内部类)
在一个.java源文件中可以有多个类,但只能有一个被public修饰的类,并且被public修饰的类名必须与文件名相一致。即如果有个hello.java的文件,这个文件中可以有多个类,比如class A{},class B{},…但是被public修饰的类必须是public class Hello{},也可以没有public 修饰的类。实例:package Demo1;class Hel...原创 2020-05-08 16:55:14 · 735 阅读 · 0 评论 -
面试题系列之是否可以从一个static方法内部发出对非static方法的调用?
这里其实问的是静态方法和非静态方法的区别:静态方法和非静态方法的区别可以总结如下:1、静态方法是属于类所有,在类实例化前即可调用此方法,调用一个静态方法就是“类名.方法名”;而非静态方法是要与对象关联在一起的,必须在实例化之后才能分配内存,在实例化一个对象后,才可以在该对象上进行该方法的调用,调用就是“对象.方法()”。2、非静态方法可以访问类中的任何成员;而静态方法只能访问类中的静态成员;...原创 2020-05-08 10:29:42 · 662 阅读 · 0 评论 -
面试题系列之&和&&的区别
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true 时,整个运算结果才为true,否则,只要有一方为false,则结果为false。既然存在两个运算符,那么他们之前肯定还是有区别的。&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,整个条件都为false。例如, int i=0; ...原创 2020-05-07 14:10:51 · 373 阅读 · 0 评论 -
面试题系列之String,Stringbuffer,StringBuilder的区别(源码分析)
记得之前参加面试的时候被问到过String,Stringbuffer,StringBuilder的区别。我当时回答String是不可变的字符串,Stringbuffer,StringBuilder是可变的字符串,Stringbuffer是线程安全的,StringBuilder不是线程安全的,所以不能同步访问。心里想这下稳了,然后就没有然后了。现在想想这样回答别人能录用才怪。所以今天就从源码的角度剖...原创 2020-03-27 13:24:44 · 1309 阅读 · 2 评论 -
String类为什么不能被继承
面试的时候我们经常会被问到一个问题,那就是String类能被继承吗?为什么?我们都知道String类不能被继承,但为什么不能却不能回答地很完整。首先我们可以看下String的源码(部分):public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ...原创 2020-03-26 17:34:38 · 6877 阅读 · 0 评论 -
Sourcetree 出现错误提示git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
在用sourcetree拉去代码是出现以下错误在工具—选项菜单栏中将SSH客户端改为openSSH即可,因为我之前设置过通过秘钥获取代码,不知道怎么又变回来了...原创 2020-03-01 09:49:32 · 8639 阅读 · 0 评论 -
IDEA创建maven项目过慢,一直卡在resolving dependencies...的解决办法
在使用IDEA创建maven项目的时候,有时候会一直卡在resolving dependencies…,导致创建项目过慢,这是由于在下载jar包的时候由于可能没有设置镜像是从远程进行下载导致过慢,也有可能是网络的原因。这时候我们如果是在开始创建maven项目的时候在Properties的属性面板中添加一项:archetypeCatalog = internal即可。archetypeCatalo...原创 2020-02-15 18:27:34 · 44569 阅读 · 4 评论 -
Parse Fatal Error at line 1 column 1: 前言中不允许有内容。
今天eclipse启动项目的时候出现一下的错误后来一看是这个路径下的test1.xml文件有问题找到该路径下的xml文件,确实文件头出现了空格,把空格删了,重新启动还是出现同样的问题。这时候找到E:\tomcat\apache-tomcat-8.5.47\work\Catalina\localhost路径下看项目,发现有个test项目为空把该项目删了, 重新启动发现还是出现该问题,而且...原创 2020-01-10 16:41:07 · 4210 阅读 · 0 评论 -
Eclipse打开TXT文件乱码
用eclipse打开txt文件出现乱码如下:选中该txt文件,然后右键选择properties属性,找到text file encoding,选中other,下拉找到GBK,有可能没有GBK选项则直接输入即可。点击apply,则文件能正常打开了!...原创 2020-01-06 16:33:43 · 1788 阅读 · 0 评论 -
为什么要有TIME_WAIT状态
TIME_WAIT状态存在有两个原因。1)、可靠终止TCP连接。如果最后一个ACK报文因为网络原因被丢弃,此时server因为没有收到ACK而超时重传FIN报文,处于TIME_WAIT状态的client可以继续对FIN报文做回复,向server发送ACK报文。2)、保证让迟来的TCP报文段有足够的时间被识别和丢弃。连接结束了,网络中的延迟报文也应该被丢弃掉,以免影响立刻建立的新连接。...原创 2019-11-21 14:04:42 · 1443 阅读 · 0 评论 -
Spring注解(二):@ComponentScan自动扫描组件
前一篇文章:Spring注解(一):@Configuration、@Bean给容器中注册组件,提到了如何通过使用配置文件的方式和注解的方式进行简单的组件注册。这里将介绍如何使用@ComponentScan注解进行组件的自动扫描。在上一篇代码的基础之上,如果通过配置文件的方式进行组件扫描,则需要在配置文件中使用context:component-scan标签元素,beans.xml文件如下:&l...原创 2019-11-19 17:11:57 · 436 阅读 · 0 评论 -
搭建本地maven仓库以及使用【图文超详细】
我们在使用maven的时候,对于项目所依赖的jar包,maven默认会在中央仓库下载jar包到本地,但是往往下载速度很忙,所以有些时候开发还需要等待。如果在本地搭建一个maven私服的话,则开发时需要的jar包可直接在私服取,并且下载速度比远程要快,如果本地仓库没有则自动从远程下载并保存在本地,大大地提高了开发效率。前提环境:安装好jdk、使用idea或者eclipse。1、首先去Maven的...原创 2019-11-11 15:46:58 · 7588 阅读 · 1 评论 -
Idea上的项目如何同步到GitHub
1、首先得在github上注册github账号:github地址。2、下载git:下载地址,但是官网下载很慢,可以去我的百度云获取git:链接: https://pan.baidu.com/s/1-PWCDrTELDu6Qac0hKNaYA 提取码: v5nu3、下载好git直接安装,一直next即可。安装完成后会弹出git的网页,然后双击打开git.Bash进行账号设置。4、在Idea...原创 2019-11-04 13:59:34 · 3252 阅读 · 0 评论 -
equals和==的区别详解
在面试的时候,equals和的区别基本上是逃不过的问题,那么都是等于,equals和究竟有什么区别呢?首先看这样一段代码:public class TestDemo2 { public static void main(String[] args) { String s1 = "hello"; String s2 = "hello"; String s3 = new String...原创 2019-11-01 17:50:12 · 1012 阅读 · 0 评论 -
如何在Tomcat上部署web项目
上一篇文章记录了如何在电脑上安装和配置tomcat:传送门。这篇文章记录下如何在tomcat上部署web项目。tomcat部署web项目有三种方式。1、内嵌式这是最简单的方式,只要将网站直接拷贝到:tomcat根目录下的webapps文件夹里。首先新建一个html文件,代码如下:<!DOCTYPE html><html><head><met...原创 2019-10-31 14:16:13 · 3989 阅读 · 0 评论 -
Tomcat的安装和配置【详细图文步骤】
关于jdk的下载和安装配置可以参考之前的一篇文章,传送门1、进入tomcat官网,我这下载的是tomcat8 windows 64位,可以根据需要选择其他版本。2、下载好解压压缩文件到任意位置bin:主要是开启、改变以及停止Tomcat的命令conf:存放一些配置文件,在这里可以修改端口号,以及设置用户名和密码等等。lib:存放一些库文件,比如一些jar包logs:保存tomcat...原创 2019-10-30 12:22:52 · 909 阅读 · 0 评论 -
求解旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。import java.util.ArrayList;public class Demo1 { ...原创 2019-09-16 10:56:51 · 122 阅读 · 0 评论 -
用两个栈来实现一个队列,完成队列的Push和Pop操作
栈(stack)也称为堆栈,是一种先进后出的线性表。它的删除与增加操作均在栈头操作。栈的特性总结为先进后出、后进先出,即最先放入栈中的元素是最后被取出来的,而最后放入堆栈中的内容最先被取出来。就好比手枪的弹夹,我们往里面填子弹,最先添加的子弹在最下面,最后添加的在最上面,而且是最先被射出的。栈中两个最重要的方法是Push()和Pop(),这两个是相反的操作。Push()是在栈顶加入一 ...原创 2019-09-15 18:04:42 · 1074 阅读 · 0 评论 -
StringBuilder为什么线程不安全【源码分析】
StringBuilder和StringBuffer的区别是面试的时候被提及最多的问题之一了,我们都知道stringbuffer是线程安全的,而stringbuilder不是线程安全的。通过stringbuffer和stringbuilder的源码,我们可以发现stringbuilder和stringbuffer都是继承了abstractstringbuilder这个抽象累,然后实...原创 2019-09-14 18:02:36 · 561 阅读 · 0 评论 -
请实现一个函数,将一个字符串中的每个空格替换成“20”【string的ReplaeAll()详解】
这题使用Java中的replaceAll()就可以了。replaceAll() 方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。语法结构如下// regex -- 匹配此字符串的正则表达式。// newChar -- 用来替换每个匹配项的字符串。// 返回值:成功则返回替换的字符串,失败则返回原始字符串。public String repl...原创 2019-09-14 11:19:51 · 241 阅读 · 0 评论 -
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
public class Solution { public boolean Find(int target, int [][] array) { for(int[] i:array){ for(int j:i){ if(target==j){ return true; ...原创 2019-09-14 11:00:45 · 114 阅读 · 0 评论 -
冒泡排序算法
一、算法思想冒泡排序是一种交换排序算法,元素通过两两的比较,交换不满足次序要求的元素,直到整个数组都满足次序要求为止。比如一个无序的数组中有元素[4,3,8,6,1],如果按照升序的排序顺序,则采用冒泡排序的过程则是:第一趟排序:先是4和3比较,4比3大,则交换位置,则顺序是 3 4 8 6 1...原创 2019-09-04 21:29:41 · 594 阅读 · 0 评论 -
系统错误:已添加了具有相同键的项的思路和解决办法
一.问题背景今天在开发的时候因为要讲角色表和用户表通过一个id进行绑定,也就是一个角色对于一个角色id,但一个角色可以对于多个用户,比如角色表有管理员、审核员、记录员等等,他们分别对于一个角色id,但管理员可以是张三、李四、王五等等。然后通过角色id进行绑定,这样使用C#中的Dictionary存值,id作为键,姓名作为值,通过判断当前的登录角色的有个操作员的筛选,即当前角色有哪些人进行了操作...原创 2019-08-23 16:08:00 · 19038 阅读 · 0 评论