- 博客(72)
- 收藏
- 关注
原创 深入浅出设计模式第一章:策略模式
将两个类结合起来使用,就是组合(composition)。组合和继承不同的地方在于,某对象的行为不是继承来的,而是和适当的行为对象”组合“来的。
2021-07-27 11:24:29
94
原创 依赖倒置原则
要依赖抽象,不要依赖具体类不能让高层组件依赖底层组件不管是高层还是底层组件,都应该依赖于抽象变量不可以持有具体类的引用,使用工厂来避开这样的做法不要让类派生自具体类,要派生自一个接口或者抽象类不要覆盖基类中已实现的方法,如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象,基类中已实现的方法,应该由所有的子类共享。...
2021-07-14 14:59:07
62
原创 垃圾收集算法
判断对象是都还活着: - 引用计数算法(**已经淘汰**) - 可达性分析算法,GCRoot最基础的算法:标记-清除分为标记和清除两步。就像清理垃圾,要从头开始一个一个的贴上待清除的标签,贴完了再一个一个的清理掉。这是很自然就能想到的一种清理方式。在生活中也是这样,看看家里哪些东西不需要了,盘点一下,不要的直接拿到外面。这种方式有两个大问题:**从时间和空间两个角度来看** -- 很费时间 -- 造成内存碎片改进:复制算法为了解决上面 标记清除 算法存在的劣势,一种叫做
2021-05-28 10:01:59
64
原创 对象的内存布局
在HotSpot 虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)实例数据(Instance Data)对齐填充(Padding)对象头包括两部分信息:第一部分用于存储对象自身的运行时数据,如哈希code、GC分代年龄、锁状态标志、线程持有的锁。第二部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。...
2021-05-24 09:31:34
76
原创 对象的创建过程
虚拟机遇到一条new 指令时,先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个类是否已经被加载、解析和初始化过。如果没有,那必须首先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存大小在类加载完成后便可完全确定。内存分配完成后,虚拟机需要将分;诶到的内存空间都初始化为零值(不包括对象头)。这一步操作保证了对象的实例字段在java代码中可以不给初始值就直接使用。程序能访问到这些字段的数据类型所对应的零值。接下来,虚拟机要对对象进行必要的而
2021-05-21 10:03:33
69
原创 运行时常量池
运行时常量池是方法区的一部分。经过编译后的二进制Class文件中,除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。一般来说,除了保存Class文件中描述的符号引用外,还会把翻译出来的直接引用也存储在运行时常量池。Java语言并不要求常量一定只有编译期 才能产生,也就是并非预先置入Class文件中常量池的内容才能进入方法区运行时常量池。运行期间也可能将新的常量放入池中。也就是说,
2021-05-20 09:10:13
436
原创 方法区
和堆一样,是各个线程共享的内存区域。用于存储已被虚拟机加载的:类信息常量静态变量编译后的代码不知道为什么要叫方法区,我觉得叫 ”元数据区“ 更合适。
2021-05-19 10:00:00
78
原创 Java 堆(Java Heap)
java堆 是java虚拟机所管理的内存中最大的一块。java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此区域唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。Java虚拟机规范:所有的 对象实例 和数组 都要在堆上分配内存。根据java虚拟机的规定,java 堆 可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。java 堆也可以叫做 "垃圾堆"...
2021-05-19 09:28:24
238
原创 本地方法栈
本地方法栈和虚拟机栈 所 发挥的作用是非常相似的。他们之间的区别不过是虚拟机栈 为 虚拟机 执行java方法 服务,而本地方法栈则 为 虚拟机 使用到的native方法 服务
2021-05-19 08:47:42
78
原创 卷积神经网络基础名词
CNN 有两大特点:能够有效的将大数据量的图片降维成小数据量。能够有效的保留图片特征,符合图片处理的原则。在CNN出现之前,图像的处理对于人工智能来说,是一个难题。有两个原因:图片需要处理的数据量太大,导致成本高,效率低。图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高。需要处理的数据量太大:图片是由像素构成,每个像素又是由RGB三个参数来表示颜色。比如,一个10001000 像素的图像,就是10001000 个方块,每个方块都是由RGB三个值来表示。卷积神经网络
2021-05-18 16:59:47
417
1
原创 java 虚拟机栈
和程序计数器一样,java 虚拟机栈也是线程私有的,它的声明周期和线程相同。虚拟机栈 描述的是java 方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用()和returnAddress 类型(指向了一条
2021-05-18 09:08:18
75
原创 处理 groovy 脚本模板中的 $ 符
str.replace("\"$","'''$'''+\"")$ 在 groovy 脚本中是保留字符,要特殊处理后才能赋值进去用三个单引号包围就能转为字符串
2020-06-05 10:36:37
1453
原创 greenplum 拼接字符转为 json 类型
insert into test select ('{"gender":'||gender||'}')::jsonb from tablealimit 5;
2020-06-02 15:27:04
735
原创 greenplum json 字段的插入值格式
1、insert into test(profile) values(’{“a”:“a”}’);2、insert into cdp_test(ren) values(’{“a”:12}’);
2020-05-27 20:40:58
475
1
原创 在Greenplum数据库中查询表的comment(亲测可用)
有的时候需要在Greenplum数据库里面查看某张表的描述信息,就是Comment on table 。废话不多说,直接上代码,亲测可用。with tmp_tab as ( select pc.oid as ooid,pn.nspname,pc.* from pg_class pc left outer join pg_namespace pn ...
2019-03-25 12:55:59
3620
原创 flink之时间概念
1、事件时间:指一条消息的创建时间,比如你半夜12点0分在网上购买了一件衣服,这个时候就会产生一条消息,你买的是什么,买了多少,付款多少,什么时间买的,最后加一个时间戳,这个时间戳就表示这个消息的事件时间。2、处理时间:上面产生的消息,被发送到flink,flink会在消息后面追加另一个时间戳,这个时间戳表示消息什么时候到的。(我猜的)3、摄取时间:指的是消息进入流计算框架的时间,有的消...
2019-03-16 19:57:19
492
原创 (greenplum)自定义函数,从数组字段中删除某个元素(亲测可用)
参数解释:taskidArray:你想要从中删除元素的数组字段oneTaskid:你想要删除的那个元素CREATE OR REPLACE function my_array_remove(taskidArray text[],oneTaskid text) returns text[] as $BODY$declare x text;declare new_array text...
2019-01-17 14:52:16
1355
原创 日志文件监控告警脚本
#!/bin/bash# log file name filename="filename"# pathpath="/home/logs/filename"# 当天日期,年月日cur_date=`date +"%Y-%m-%d"`# 告警时间time=`date +"%Y-%m-%d %H:%M:S"`# log filefile=${path}"/"${filenam...
2019-01-09 14:34:52
2379
原创 在greenplum中自定义获取时间数组字段最大值函数。(亲测可用)
CREATE OR REPLACE function maxTime(arr timestamp[]) returns timestamp as $BODY$declare x timestamp;declare min timestamp;begin if arr is null then return null; end if; if array_length...
2019-01-09 12:08:02
1202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人