自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021-08-30 午休学习小结--jvm学习 2.3.1对象的创建

学习自深入理解jvm虚拟机在语言层面上,通常通过一个new 来创建对象在jvm中,普通java对象,不包括数组和Class对象(每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象)是怎么创建的?下面跟着小编来看看吧(不是)jvm遇到字节码new指令后创建过程1.类加载检查首先检查这个指令的参数是不是能够在常量池中定位到一个类的引用, 检查这个引用代表的类是否被加载解析过、加载过、初始化过,如果没有,那必须先进行类加载(后续学习)2. 为新生对象分配内存问题1 怎么判断

2021-08-30 17:13:44 90

原创 Mysql explain学习记录

在 阿里java规范中:【推荐】SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts最好。说明:1)consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。2)ref 指的是使用普通的索引(normal index)。3)range 对索引进行范围检索。反例:explain 表的结果,type=index,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range 还低,与全表扫描是小巫见大巫。工作中

2021-08-23 18:22:28 129

原创 FutureTask 学习记录

FutureTask 学习记录学习自《深入浅出java多线程》和网上一些文章为啥使用他?在很多⾼并发的环境下,有可能Callable和FutureTask会创建多次。FutureTask能够在⾼并发环境下确保任务只执⾏⼀次。简单介绍实现了RunnableFuture接口,该接口继承了Runnable, Future接口简单使用案例FutureTask源码学习欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编

2021-07-20 17:28:02 121

原创 打包镜像使其能启动的时候运行脚本

1 容器里写好脚本,位置随便放2 打包为镜像docker commit xxx zhj_test_image:v13 启动镜像docker run -ti zhj_test_image:v1 /bin/bash /home/start.sh4 将刚刚启动的容器打包为镜像,他就能在启动的时候运行脚本啦(其他方法例如修改/etc/rc.local 我测试有时会失败。。。不知道为什么)...

2020-11-28 10:37:01 312

转载 装饰者模式学习记录

学习自设计模式之装饰者模式今天在学习Java io的时候发现介绍中说使用了装饰者模式,发现这个设计模式并不熟悉,特此学习记录下装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。顾名思义,可以按照要求来动态装饰你的对象,以便获得需要的功能。通过一个例子来学习:咖啡店例子这个咖啡店有个下单系统,可以自动下单饮料,返回价格因此我们可以设计一个抽象类Beverage,所有店里的饮料必须继承此类,该类有个变量description,用来描述是啥饮料,利用getDes

2020-11-04 12:30:55 96

转载 HashMap整数排序问题,Hashmap遍历速度问题,HashMap如何保证初始化长度为2的次幂

发现问题今天算法同事问我HashMap会对整数key进行排序么?我脱口而出不能啊,结果他给我看结果,发现真的排序了,于是我自己试了一下, Map<Integer, Integer> map = new HashMap<Integer, Integer>(); map.put(3,3); map.put(1,1); map.put(5,5); map.put(11,11); map.put(6,6

2020-11-03 19:37:36 289

原创 2020-10-18 周个人总结(Jmeter使用)

JmeterJmeter可以用来压测,可以用来模拟多线程运行java程序。安装1.去官网下目前安装了两个版本:2.9需要java1.6环境,5.3需要java1.8环境。2.解压就可以了3.linux环境下还需要配置环境变量,需要注意jmeter需要的java版本,要是不合适也要临时配置。个人配置如下(5.3版本):export JMETER_HOME=/home/work/zhanghongjie02/jmeter/apache-jmeter-5.3export CLASSPATH=$ J

2020-10-18 20:11:51 144

转载 设计模式--Java原型模式个人学习记录

学习自《JAVA与模式》之原型模式,(二十三)原型模式详解(clone方法源码的简单剖析)代码见zhj_design_patterns的prototype_pattern什么是原型模式?属于对象的创建模式,我理解的就是复制一个原型对象,创建出很多个同类型的对象。就是.clone()Java对原型模式的支持:Object类提供了一个方法 clone,而Java中所有的类只要实现Cloneable接口(不继承的话会报CloneNotSupportedException),就可以重写clone方法进

2020-09-28 19:07:58 83

转载 final和static关键字的作用

学习自谈谈final的作用static关键字作用总结final关键字他的作用:(这三点大家都知道)1.被final修饰的类不能被继承2.被final修饰的方法不能被重写3.被final修饰的变量不能被改变前俩都好理解,重点就第三句,被final修饰的变量不能被改变,通常会理解为值不变,也就是内容不变(我觉得是因为String是不可变的,导致有这个错觉),到底是变量的引用还是引用的内容不变呢?可以看见16-18行,用final修饰的变量fs的内容是可以被改变的,而在20行会出错,可见,被f

2020-09-27 20:48:05 2237

转载 2020-09-27 bug总结, String的getBytes()转码方式,.new Integer(int)效率低

1. String的getBytes()转码方式在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同OS下,返回的东西不一样!因此,使用getBytes(“utf-8”)2.new Integer(int)效率低,使用Integer.valueOf(int)代替学习自添加链接描述为什么new Integer(int)效率较低呢?两个都是得到一个Integer对象,但是Integer.valueOf的效率高。为什么呢?因为Integer.

2020-09-27 18:08:06 326

转载 设计模式---观察者模式 个人学习记录

学习自《JAVA与模式》之观察者模式观察者模式介绍观察者模式定义了一种一对多的依赖关系,让一个或者多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式所涉及的角色有:●  抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。

2020-09-25 10:37:48 59

转载 2020-09-22 个人学习记录(建造者模式)

个人计划1–建造者模式linux命令watch -n 0.1 nvidia-smi 每隔0.1秒刷新一次nvidia-smi(看英伟达显卡使用情况)2.sh脚本中的for循环—循环1000次for k in $( seq 1 1000)done3,看python版本:退出ctrl+dpython -v4.解压tgz文件tar -xvf cudnn-10.0-linux-x64-v7.3.1.20.tgz5.查看python进程ps -ef | grep python个人计划1–建造

2020-09-24 19:13:04 112

转载 2020-09-16 个人学习记录(更新githun代码,单例,linux命令,动态代理)

今日计划1.设计模式—复习下单例2.spring aop学习git将本地代码更新到github仓库git clone https://github.com/Suddee/zhj_design_patterns.gitgit add .git commit -m “”git push -u origin master(分支)今天学到的linux命令grep error * 查看目录下所有文件的错误信息,检测日志的时候很好用在libmkl_intel_lp64.so: cannot

2020-09-21 15:46:31 158

转载 2020-09-14 个人计划及总结(工厂模式,Spring启动流程和bean实例化过程)

个人计划1.常用设计模式-----工厂模式2.数据结构–array源码学习

2020-09-16 11:00:54 118

原创 Springboot-slf4j配置文件

学习自网络在springboot依赖中已经有slf4j依赖了,不需要新导入在引用的时候:private static final Logger logger = LoggerFactory.getLogger(MySpeechTranscriberListener.class);logger.info(result.toString());配置文件logback.xml<?xml version="1.0" encoding="UTF-8"?> logback

2020-08-18 17:59:11 1235

原创 Java 回调函数学习个人记录

学习自Java 回调函数用一个生活中的例子:假设公司leader安排你做一件事情,这件事情需要花费一些时间去做,leader肯定不能看着你做完,需要你做完后通知他。这个就可以用到回调新建3个类,Manager,Personel ,MainManager类是个模拟总经理的类,当该类的对象被造出来后就会通过Personnel的对象去执行Personnel中的doSomething方法告诉员工做些什么。总经理通过调用Personnel中的doSomething方法告诉员工该做些什么,当员工做完后就通

2020-08-11 11:38:56 100

原创 阿里语音识别sdk_demo--发送音频数据帧的过程

1.创建SpeechTranscriberDemo。demo.process(filePath)2.在SpeechTranscriberDemo的process方法中File file = new File(filepath);FileInputStream fis = new FileInputStream(file);byte[] b = new byte[3200];//阿里每片发3200字节int len;while ((len = fis.read(b)) > 0) {//直到

2020-08-10 17:13:06 682

原创 设计模式--接口隔离,个人学习记录

每个类应该依赖最小接口代码改进

2020-08-03 22:25:38 79

原创 设计模式个人学习记录01--单一职责原则

他是什么?对类来说,一个类只应该负责一个职责,如果一个类负责了两个职责,修改职责1的时候可能会造成职责2的问题,应把这种类分为两个1降低类的复杂度,一个类只负责一个职责2提高类的可读性,可维护性3降低修改的风险4通常情况下,我们应该在代码中遵守单一职责原则5.类中的方法比较少,可以在方法的层面遵守单一职责原则方案2//方案2分析://1.严格遵守单一职责原则//2.但是这样他的改动很大,即将类分解,修改客户端//3.改进vehicle类,改动的代码会比较少方案3//方法3虽然没

2020-08-02 20:36:27 140 1

原创 Tornado个人学习记录,异步

学习自Tornado入门导入Tornadopip install Tornado基础Tornado启动实例打开浏览器可以看到localhost:8888可以看到hello,worldtornado主要构成一个普通的tornado web通常有四部分:1)ioloop实例,他是全局的Tornado事件循环,是服务器的引擎核心,示例中tornado.ioloop.IOLoop.current()就是默认的tornado ioloop实例。2)app实例,他代表一个完成的后端app,他会挂接一个

2020-07-24 10:58:49 186

转载 kaldi yesorno案例学习记录

学习自Kaldi-yesno详解先来学习run.sh脚本#!/bin/bashtrain_cmd=“utils/run.pl”decode_cmd=“utils/run.pl”#-d filename 判断filename是否为目录,是为真,即下面的是如果waves_yesorno部署目录,去网站下载,||逻辑或,如果前面的语句执行成功,后面的就不执行了,如果前面的出问题,就异常退出(exit 0 代表正常运行程序并退出程序,exit 1 代表非正常运行导致退出程序。其实目的就是: 程序退出后,

2020-07-23 16:14:31 279

转载 docker学习记录

学习自Docker——入门实战能够在一定程度上代替传统虚拟机,优势:1)更搞笑的利用系统资源,由于容器不需要进行硬件模拟以及运行整个完整的操作系统等额外开销,docker对系统资源利用率更高。无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机更加高效。因此,相同配置下,docker往往可以运行更多数量应用。2)更快速的启动时间:docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,最快甚至能到毫秒级,节约时间。3)一致的运行环境:开发过程中一个常见的问题是环境不一致的

2020-07-23 14:23:54 46

原创 Java 线程池学习记录

学习自1小时搞清楚Java线程池原理线程是我们调度cpu的最小单元,用户级线程ULT:就是由我们电脑安装的第三方应用来创建和管理的,不需要用户态、内核态之间切换,速度快,内核对ult是无感知的内核级线程KLT:操作系统管理和创建最主要的区别:就是ULT是由我们第三方应用app创建管理,而KLT是我们操作系统os来创建管理。JVM使用的是哪一种线程模型呢?如果是ULT的话,我们Java创建多个线程,任务管理器应该看不到变化,而如果是KLT,应该能看到明显的变化创建300个线程后,这个数变成了

2020-07-17 10:29:37 128

原创 多线程实现生产者和消费者

底层依赖wait和notify的通信技术这种情况下,读线程可能会在写线程写到一半的时候读到值,导致会出现zhj,女或者jhz男的情况这样写也是不行的,因为input中的Synchronized(this)锁的是这个对象,而out的this是out那个类,不是同一把锁啊.只要把this换成两个线程需要共享的变量res就可以了,这个也有一个问题,就是消费者可能运气很好,一直拿到锁,就会一直打印相同的。所以我们使用wait和notifywait:会让当前线程变成阻塞状态,放弃cpu执行权,同时会

2020-07-13 18:12:12 395

原创 多线程Java

什么是进程?当我们启动一个应用程序,就会开启一个进程。win:通过任务管理器Linux:ps kill -9在进程中至少有一个线程,该线程就是主线程进程就是线程的集合。什么是线程一条程序执行的路径多线程的好处提高程序的效率同时的并行的多线程的应用场景1异步的实现发送短信,快速提高响应,对用户的体验就非常好2.异步的记录日志3.对我们后端接口中比较耗时间的代码都可以采用异步实现。为什么需要用到多线程http属于同步,整个过程基于请求和响应的过程,如果服务端没有及时响应给客户端的

2020-07-13 16:25:07 75

原创 List常见实现ArrayList,LinkedList,Vector及其对应底层实现

List常见实现由ArrayList,LinkedList,VectorList是一个接口,它继承与Collection接口,代表它是有序的(即按照存入顺序遍历),List与Set的区别:1)List是有序的,是可以重复的2)Set是无序的,是不可用重复的ArrayList,LinkedList与Vector之间的区别:1)ArrayList与Vector是用数组来实现的,LinkedList使用链表来实现2)ArrayList不是线程安全的,而Vector使用锁(synchronized)来

2020-07-10 23:57:11 409

原创 Java 常用api及其底层实现一String

Java API是JDK所提供的使用类,这些类将底层的代码给封装起来了。Object类是java语言中的根类,它所描述的所有方法子类都可以使用,所有类在创建对象的时候,最终找的父类就是Object。。在Objec类中,最常见的就是euqals方法和toString方法。equals方法用于比较两个对象是否相同,实质是比较两个对象的内存地址。在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型。在调用对象的属性时,一定要

2020-07-10 21:42:27 351

原创 SpringMVC流程

学习自https://www.cnblogs.com/leskang/p/6101368.html1 发起请求到前端控制器DispatcherServlet2 前端控制器 请求 HandlerMapping查找Handler(可以根据xml配置,注解进行查找)3 HandlerMapping 返回handler,handlerMapping会把请求映射为HandlerExecutionCh...

2019-09-06 17:23:09 74

原创 排序算法个人总结

1 快速排序:过程 两个数比较大小,如果第二个数小,交换位置优化针对数据排好序后,冒泡排序还是会进行下一轮的比较设置一个标志flag,如果发生了交换设置为1,没有就为0当一轮比较结束后,flag依然为0,说明已经排好序,则不需要下面的排序了时间复杂度: O(n2), 最好情况O(n)空间复杂度:O(1)稳定性:稳定2选择排序过程:在长度为n的数组中,第一次遍历n-1,找到最小...

2019-09-06 14:34:12 91

原创 Mybatis面试题个人总结

Mybatis基本流程1 读取配置文件,配置文件包括数据库连接的信息或者Mapper映射文件或者Mapper包路径2 有了这些就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级的,程序运行时候建立,程序结束的时候消亡3 SqlSessionFactory建立SqlSession,目标是执行sql语句,SqlSession的生命周期是方法级,一个方...

2019-09-01 15:48:58 363

原创 实习感受

个人介绍:实习生活,虽然忙碌但是充实快乐,感触是很深的,提高的方面很多,但对我来说最主要的是工作能力的进步,学习到了很多在学校里没有接触过的盲区:1 DDD架构:过去使用的架构都是数据库驱动模型,只关心数据,这些数据对象除了简单setter/getter方法外,没有任何业务方法,被比喻成失血模型,而DDD架构中的领域模型则更像一个生动的个体,打个可能不太恰当的比喻:好似武侠小说中的各个侠客,...

2019-08-25 19:10:56 108

原创 Java类加载机制

类加载机制的概述:虚拟机将描述类的数据从Class文件(静态描述)加载到内存,并对数据进行校验,转换解析,初始化,最终形成可以被虚拟机直接使用的Java类型,这就是类加载机制。Java是一个可以动态扩展的语言因为java的类加载机制相当于一个懒加载策略,用到了才加载,和动态连接,在程序运行期间可以随时改变类加载的时机加载---->连接---->初始化----->使用--...

2019-08-18 20:33:30 84

原创 Linux常用命令-shell脚本学习总结

第一章 计算机概论计算机定义为:接受用户输入的数据和指令,通过中央处理器的逻辑与运算单元处理后,以产生或存储成有用的信息。计算机的五大单元为:输入单元,输出单元,控制单元,算数逻辑单元,记忆单元,其中cpu中又控制单元,算数逻辑单元,记忆单元又分为主存储器和辅助内存。数据会流入/流出内存是cpu发布的控制命令,而cpu要处理的数据完全来自内存。cpu设计的理论分为:精简指令集(RISC)和...

2019-08-15 16:16:46 91

转载 基于Java的位运算基础

位运算非常重要,之前一直懒没系统学,结果面试吃了大亏哎,先整理一下位运算的基础知识:原码,反码,补码在Java中,可以进行位运算的类型long,int,short,byte,char,其中64位的long,32位的int是可以直接进行位运算的,short,byte,char实际上是先转换为32位的int类型再进行位运算原码,反码,补码的共同特点:都是计算机中一个定点数的表达方式,都有符号位...

2019-08-13 15:52:35 80

原创 实习项目总结1

在某公司实习过程中,参与了支付系统重构的一个小需求中,做一个业务操作编码的管理后台,比较简单,但是也遇到了很多问题,在此做一个总结1 ddd架构组内推崇ddd的设计架构,之前都是用的controller-service-dao-po的架构,初涉及ddd的时候满头雾水,经过一段时间的学习之后,发现之前用的那种架构,开发简单的增删改查很容易,但是涉及到复杂的业务逻辑后,service或者contr...

2019-07-31 17:37:19 471

原创 剑指offer 总结3

1 二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。从第一行最后一个开始遍历2替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%2...

2019-06-26 16:01:20 68

原创 Spring 源码分析3 个人总结aop

AOP:动态代理:指在程序运行期间动态的将某段代码切入到指定方法指定位置进行的编程方式过程:1导入aop模块2定义一个业务逻辑类3定义一个切面类,切面类中的方法需要动态感知业务类的方法运行到哪一步了通知方法:前置通知(@Before):在目标方法运行之前运行后置通知(@After):在目标方法运行之后运行返回通知(@AfterReturning):在目标方法正常返回之后运行异常通...

2019-06-24 17:54:03 151

原创 Spring 源码分析2

bean的生命周期bean创建----初始化—销毁的过程容器管理bean的生命周期我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法1)指定初始化和销毁方法指定init-method和destroy-method初始化:对象创建完成(默认都是单例模式的饿汉模式哦,这种情况就是容器创建的时候就创建了一个bean的单实例),并赋值好,调...

2019-06-24 12:13:47 140

原创 单例模式 个人总结

面试的时候被问到这个,一点不会很尴尬,单例模式:保证一个雷只有一个实例,并提供一个访问他的全局访问点,他可以严格控制客户端怎么样访问他以及何时访问他,简单说就是对唯一实例受控访问最简单的单例模式但是这种在多线程中,如果一个刚通过if判断,另一个也通过了,就会出现多个实例。改进:双重锁定推荐用重点1:volatile必须加,要不然,即使判断两次都不行,因为在构建实例的时候有大概4部...

2019-06-21 20:35:46 126

原创 Spring 源码分析 总结1

Spring认为所有的组件都应该放在ioc容器中,所有的组件靠容器来自动装配,也就是依赖注入组件添加的常用注解@ComponentScan 包扫描@Bean 给容器中注册一个bean,加在方法上,但通常会用于添加对象到容器中,类型是返回值的类型,名字默认为方法名@Bean(“person01”) 就会将bean的名字改为person01public Person person(){re...

2019-06-21 20:34:11 104

空空如也

空空如也

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

TA关注的人

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