自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ym & blog

rm -rf /*

  • 博客(305)
  • 收藏
  • 关注

原创 数据结构-C语言实现各种排序

参考:https://blog.youkuaiyun.com/qq_41998576/article/details/81635566一、 排序的分类►插入排序:直接插入排序 希尔排序►交换排序:冒泡排序 快速排序►选择排序:简单选择排序 堆排序二、排序算法比较排序方法最好时间平均时间最坏时间辅助存储稳定性插入排序O(n)O(n^2)O(n^2)O(1)...

2019-01-25 10:24:11 1103

原创 Effective java 总结11 - 序列化

序列化对象->字节流反序列化字节流->对象没有事先认真考虑默认的序列化形式是否合适,则不要贸然接受如果一个对象的物理表示法等同于它的逻辑内容,可能就适合于使用默认的序列化形式}//通常必须提供一个readObject方法以保证约束关系和安全性(保证lastName、等非NULL)如果一个对象的物理表示法与它的逻辑内容有实质区别时,使用默认的序列化有很多缺点}}使这个类的导出API永远束缚在该类的内部表示法上会消耗过多的空间、时间有可能引起栈溢出修订优化版本。...

2022-07-20 09:11:44 412

原创 Effective java 总结10-并发

Synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块同步可以阻止一个线程看到对象处于不一致的状态中,还可以保证进入同步方法和同步代码块的每个线程,都能看到由同一个锁保护的之前所有的修改效果为了在线程之间进行可靠的通信,也是为了互斥访问,同步是必要的例子一个线程停止另一个线程//无效的代码--由于没有同步,bk线程永远不会停止,(读取的是stopRequested内存中的副本不会变)publicclassStopThread{while(...

2022-07-19 17:17:02 380

原创 Effective java 总结9-异常

异常应该只被用于异常的情况下,永远不应该用于正常的控制流设计良好的API也不应该强迫他的客户端使用异常控制流//可用for(Iteratori=collection.iterator();){}//不用try{...}

2022-07-19 17:16:30 365

原创 Effective java 总结8-通用编程

java允许在任何可以出现表达式的地方声明变量在第一次使用它的地方进行声明每一个局部变量都应该包含一个初始化表达式在循环种植后不再需要循环变量的内容,for优先于while,在for循环中定义变量,作用域即被限定在循环中,避免“剪切-粘贴”错误使方法小而集中。...

2022-07-19 17:16:00 215

原创 Effective java 总结7- 方法

/灵活且方便,不必再手工进行null检查this.strategy=Objects.requireNonNull(strategy,"strategy");assertion断言断言如果失败,抛出AssertionError,没有起到作用也没有成本开销//非公有的方法通常使用断言检查参数privatestaticvoidtest(longa[],intoffset,intlength){asserta!=null;...}构造器参数检查。...

2022-07-19 17:15:30 281

原创 Effective java 总结6-Lambda和Stream

带有单个抽象方法的接口作为函数类型,其实例称为函数对象//匿名类Comparator代表排序的抽象策略Collection.sort(words,newComparator{}});*//编译器利用一个称作类型推导的过程,根据上下文推断参数类型,返回值等*//建议删除所有Lambda的参数类型,除非它们的存在能使程序更清晰//比较器构造方法Collection.sort(words,comparingInt(String。...

2022-07-19 17:14:58 216

原创 Effective java 总结5 - 枚举和注解

java两种特殊的引用类型类枚举类型接口注解类型标记接口不包含方法声明的接口标记接口对于标记注解的优势标记接口定义的类型由被标记的类的实例实现,标记注解没有定义这样的类型允许在编译时捕捉到注解运行时才能捕捉到的错误可以被更加精确地锁定标记注解是更大注解的一部分,在支持注解作为编程元素的框架中具有一致性egjava.io.Serializable表明实现该接口才能序列化,反序列化选择标记接口想要定义一个任何新方法不不会与之关联的类型标记注解。...

2022-07-19 17:14:24 333

原创 Effective java 总结4 - 泛型

声明中具有一个or多个类型参数的类或接口,就是泛型类或接口,统称泛型每个泛型都定义一个原生态类型(泛型名称,egList的原生态类型为List)泛型会自动进行编译期类型检查如果使用原生态类型,就会失去泛型在安全性和描述性方面的优势在不确定或者不在乎集合中类型时,使用无限制的通配符替代原生态类型Set必须在类文字中使用原生态类型List.class、String[].class,List.class则是非法的Set参数化类型List实际类型参数String。...

2022-07-19 17:13:48 208

原创 Effective java 总结3 - 类和接口

类和接口是Java语言的核心,也是基本抽象单元当类实现接口时,接口就充当可以引用这个类的实例的类型常量接口是对接口的不良引用接口不包含方法,只有静态的final域,每个域导出一个常量正确使用枚举类or常量类}//阻止实例化publicstaticfinalintMIN_VALUE=111;...}接口应该只被用来定义类型,不应该被用来导出常量。...

2022-07-19 17:12:08 299

原创 Effective java 总结2 - 对于所有对象都通用的方法

Object是一个具体的类,它的所有的非final方法equals,hashcode,toString,clone,finalize被设计成需要覆盖的,因此有自己的通用约定,覆盖的时候需要遵循这些约定。

2022-07-19 17:11:35 354

原创 Effective java 总结1 - 创建和销毁对象

静态工厂方法有名称不必每次调用的时候创建一个新的对象可以返回原返回类型的任何子类型对象返回对象的类可以根据方法的参数值变化方法返回对象所属的类,编写包含该静态工厂方法的类时可以不存在(服务提供者框架)...

2022-07-19 16:58:58 505

翻译 类加载器 jboss_JBoss AS 7类加载说明

jboss类加载器

2022-07-18 16:06:52 716

原创 CONCURRENT—JDK工具篇下

CONCURRENT—JDK工具篇下第十七章 通信工具类类(java.util.concurrent)作用Semaphore限制线程的数量Exchanger两个线程交换数据CountDownLatch线程等待直到计数器减为0时开始工作CyclicBarrier作用跟CountDownLatch类似,但是可以重复使用Phaser增强的CyclicBarrierSemaphoreSemaphore这个工具类提供的功能就是多个线程彼此“打信号”。

2021-11-02 17:20:49 193

原创 CONCURRENT—JDK工具篇上

CONCURRENT—JDK工具篇上第⼗⼆章 线程池原理为什么要使⽤线程池创建/销毁线程消耗系统资源,线程池可以复⽤已创建的线程控制并发的数量。并发过多,资源消耗过多,可能造成服务器崩溃(主要原因)可以对线程做统⼀管理线程池的原理Java中的线程池顶层接口是Executor接口,ThreadPoolExecutor是这个接口的实现类。ThreadPoolExecutor提供的构造方法四个构造方法:// 五个参数的构造函数 (下面的构造参数前五个和此构造参数一致)publ

2021-11-02 17:19:47 178

原创 CONCURRENT—原理篇

CONCURRENT—NOTE2——原理篇第六章 Java内存模型基础知识并发编程模型的两个关键问题线程间如何通信?即:线程之间以何种机制来交换信息线程间如何同步?即:线程以何种机制来控制不同线程间操作发生的相对顺序有两种并发模型可以解决这两个问题:消息传递并发模型共享内存并发模型这两种模型之间的区别如下表所示:如何通信如何同步消息传递并发模型线程之间没有公共状态,线程间的通信必须通过发消息来显式进行通信发消息自然同步,发消息总是在接收消息之前,因此同步是

2021-11-01 14:23:17 311

原创 CONCURRENT—基础篇

CONCURRENT—NOTE1——基础篇第一章 进程与线程的基本概念使用多线程,有以下几个好处:进程间的通信比较复杂,而线程间的通信比较简单,通常情况下,我们需要使用共享资源,这些资源在线程间的通信比较容易。进程是重量级的,而线程是轻量级的,故多线程方式的系统开销更小。进程和线程的区别进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O):进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数

2021-10-29 11:10:14 318

转载 maven-shade-plugin入门指南

maven-shade-plugin入门指南有时候,需要将复杂的项目, 包括各种xml文件属性文件, 类, jar等等打包到一个可以执行的jar包中, 然后用java -jar xxx.jar 来运行项目, 这样简单方便, 特别是在编写一些测试工具时,尤为重要。但是经常发现打包后的项目无法启动, 其中一大类是您项目有问题, 但是这个相对好解决, 毕竟自己的项目可以在windows下的ide中做各种调试,测试都测试好了, 在打包一般程序问题的概率就低得多了。1. Why?uber-jar 即为 su

2021-08-27 10:47:29 5188 1

转载 WEB-INF与META-INF详解

WEB-INF与META-INF详解WEB-INFWEB-INF简介WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。如果想在页面中直接访问其中的文件,必须通过 web.xml 文件对要访问的文件进行相应映射才能访问。WEB-INF目录的作用/WEB-INF/web.xmlWeb应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。/WEB-INF/classes/包含了站点所有用的 class 文件,包括 s

2021-08-24 17:02:47 2919

转载 pom中maven变量相关

文件相关${project} 是 pom.xml 的根节点, 工程的根目录project.basedir(同{project.basedir} (同project.basedir(同{basedir})就是当前pom.xml文件所在的目录。Maven内置属性说明Maven共有6类属性:内置属性Maven预定义,用户可以直接使用${basedir} 表示项目根目录,即当前pom.xml文件的目录${version}表示项目版本project.basedir同{project.

2021-08-24 17:02:25 1929

转载 java项目中的classpath到底是什么

java项目中的classpath到底是什么顾名思义,classpath就是class的path,也就是类文件(*.class的路径)。一谈到文件的路径,我们就很有必要了解一个java项目(通常也是web项目)它在真正运行时候,这个项目内部的目录、文件的结构;这样,我们才好分析、理解classpath。开发时期的web项目结构下面,我以一个ssm的项目为例,我先把开发时候的项目的目录结构图放出来。根据maven的约定,一般我们的项目结构就像下面这样。classpath用在哪里了?而我们经常用到c

2021-08-24 17:01:43 2153

转载 ClassPath与 FileSystem(ApplicatonContext)的区别

ClassPath与 FileSystem(ApplicatonContext)的区别ClassPathXmlApplicationContextclasspath: 默认就是指项目的classpath路径下面, classpath: 可以缺省如果要使用绝对路径,需要加上 file: 前缀表示这是绝对路径, 不可缺省示例public void testBean(){ //单配置文件方式一 BeanFactory beanFactory=new ClassPathXmlA

2021-08-24 17:01:12 250

转载 java动态代理

java动态代理了解代理模式代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式。为了对外开放协议,B往往实现了一个接口,A也会去实现接口。但是B是“真正”实现类,A则比较“虚”,他借用了B的方法去实现接口的方法。A虽然是“伪军”,但它可以增强B,在调用B的方法前后都做些其他的事情。Spring AOP就是使用了动态代理完成了代码的动态“织入”。使用代理好处还不止这些,一个工程如果依赖另一个工程给的接口,但是另一个工程的接口不稳定,经常变更协议,就可以使用一

2021-08-16 14:54:15 117

转载 git - stash

git - stashgit stash(git储藏)可用于以下情形:发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash。使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必

2021-08-16 14:52:20 163

原创 checkstyle maven 插件使用

checkstyle maven 插件使用简介检查Java源文件是否与代码规范相符主要包括:Javadoc注释命名规范多余没用的ImportsSize度量,如过长的方法缺少必要的空格Whitespace重复代码maven 集成pom.xml 配置 <!--公共checkstyle标准配置,可以在子模块中覆盖,修改自定义选项--> <plugin> <groupId>o

2021-05-28 15:15:01 2798

转载 Findbugs maven 插件使用

Findbugs maven 插件使用FindBugs™手册 http://findbugs.sourceforge.net/manual/index.html0、概述FindBugs是一个静态分析工具,它将**字节码(因此需要先编译)**与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。简而言之,FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。比较典型的,如引用了空指针(null pointer), 特定的资源(

2021-05-19 17:51:27 1283

转载 ApplicationListener 学习

ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理。如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被触发。这种事件机制都必须需要程序显示的触发。其中spring有一些内置的事件,当完成某种操作时会发出

2021-05-14 11:02:34 181

转载 Java中的static关键字解析

原文链接:https://www.cnblogs.com/dolphin0520/p/3799052.html一.static关键字的用途在《Java编程思想》P86页有这样一段话:“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一

2021-04-14 15:29:00 72

转载 gdb调试

一、gdb调试简介及常用命令gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb下常用的命令。1、编译代码并启动gdbgcc -g test.cpp -o test //-g选项告诉gcc在编译程序时加入调试信息//没有这个选项就会报错:No symbol table is loaded. Use the "file" commandgdb -q test //启动gdb,加上-q选项屏蔽掉版本等无用信息2、调试选项

2021-03-03 15:23:24 468 1

原创 重构,改善既有代码的设计 -- 阅读笔记

代码的坏味道神秘命名直观明了,能够清晰地表明自己的功能和用法改变函数声明变量改名字段改名重复代码两个函数含有相同的表达式:提炼函数移动语句重组代码顺序,再提炼一个超类的不同子类中:函数上移、避免互相调用过长函数什么时候分解函数?一段代码需要以注释来说明函数做什么、如何做 (函数名解释用途)如何分解?大段代码:提炼函数太多的临时变量:以查询取代临时变量参数列表过长: 引入参数对象、保持对象完整 、以命令取代函数条件表达式: 分解条件表达式庞大

2021-01-27 17:38:56 185

转载 linux 快速清空文件内容

$ : > filename #其中的 : 是一个占位符, 不产生任何输出.$ > filename$ echo "" > filename$ echo /dev/null > filename$ echo > filename$ cat /dev/null > filename$ cp /dev/null filename

2021-01-14 16:27:32 817

转载 GIT相关(不断补充)

rebase作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁!但是需要注意的是:不要通过rebase对任何已经提交到公共仓库中的commit进行修改(你自己一个人玩的分支除外)git log # 查看提交历史记录 可以按s向下翻loggit log --oneline # 可以一行展现合并commit当我们在本地仓库中提交了多次,在我们把本地提交push到公共仓库中之前,为了让提交记

2021-01-08 15:24:13 190

转载 IP地址(分类)、子网掩码、网络号、主机号、子网号

IP地址IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信。我们可以把“个人电脑”比作“一台电话”,那么“IP地址”就相当于“电话号码”,而Internet中的路由器,就相当于电信局的“程控式交换机”。IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),

2020-12-30 17:38:01 73542 7

转载 批量修改文件中的内容、批量删除文件or目录

批量修改文件内容方法一find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'# perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.方法二sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`sed -i "s/oldString/newString/g" `grep oldString -rl /path`# se

2020-12-29 14:08:20 702

转载 Oracle 序列(sequence)的创建、修改及删除

原文链接Oracle 创建序列:create sequence xxxxOracle中的序列并不是和MySQL中的自增长一样,连续性的,而是跳跃、不连续性的。如要使他连续,则必须指定相关的属性和值。 create sequence student_id minvalue 1 --最小值 nomaxvalue --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue maxvalue 999 -- 最大值 start with 1 --从1开始计数,数值可变

2020-12-28 17:03:41 1390

转载 Oracle、MySQL主键自增长

原文连接Oracle1、建表create table student( id   number not null, -- 主键 name  varchar2(20), birthday  date, age     number(20), phone varchar2(60), email varchar2(10) )alter table student add constraint student_pk pri

2020-12-28 16:45:56 178

原创 leetcode-322零钱兑换(动态规划)

零钱兑换https://leetcode-cn.com/problems/coin-change/给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例

2020-11-30 14:45:13 108

转载 Jackson用法

一、简介二、依赖三、 ObjectMapper一)、从JSON中获取Java对象1、简单示例2、 ObjectMapper如何匹配JSON对象的字段和Java对象的属性3、JSON字符串–>Java对象3、JSON 字符输入流–>Java对象4、JSON文件–>Java对象5、JSON via URL—>Java对象6、JSON字节输入流–>Java对象7、JSON二进制数组–>Java对象8、JSON数组字符串–>Java对象数组9、JS

2020-06-30 17:19:05 858

转载 git 相关

Git教程git - 简明指南图解 GitGit 配置Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config

2020-06-08 18:22:24 273

转载 Java web项目的classpath和classpath*的区别

原文:https://blog.youkuaiyun.com/javaloveiphone/article/details/51994268https://blog.youkuaiyun.com/quliuwuyiz/article/details/79658951src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是资源目录, 客户端不能直接访问。WEB-INF/classes目录存放src目录java文件编译之后的class文件,xml、properties等

2020-06-05 11:01:38 291 1

空空如也

空空如也

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

TA关注的人

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