自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张茂祯的博客

哈!一个测开的成长之路

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

原创 【Python】字典和set

字典dict和set字典dictset字典dictpython内置了字典:dict的支持,即map,key-value字典内部存储和key放入顺序是没有关系的。#初始值d = {'Michael':95, 'Bob':75,'Tracy':85}#输出时d['Michael']>>>95#通过key放入d['jack'] = 88#通过in判断key是否存在'Thomas' in d>>>false#通过dict提供的get()方法,如果key

2021-01-06 20:07:02 714 1

原创 【Python】循环

循环for循环while循环for循环# 对列表元素进行逐次循环打印输出for index in lists: print(index)#产生从0~number整数序列range(number)while循环while n > 0: sum = sum + n n = n - 2print(sum)

2021-01-05 20:45:13 141

原创 【Python】汇总

Python列表与元组列表与元组

2021-01-05 20:37:21 144

原创 【python】列表与元组使用

列表与元组列表与元组列表元组列表与元组列表#list内元素数据类型可以不同listname = ['Apple',123,true]#list内可以嵌套listlistname = ['Apple',123,true,['app','pc']]#list可以为空,长度为0listname = []len(listname)#输出为0#列表长度len(listname)#index是下标,从0开始,负数从后取,-1取最后一个listname[index]#在列表尾添加新元素lis

2021-01-05 20:25:48 183 2

原创 【大数据】Presto

Presto介绍介绍Presto是由FaceBook开发的,是一个运行在多台服务器上的分布式查询引擎,本身并不存储数据,但是可以接入多种数据源(Hive、Oracle、Mysql、Kafka、Redis等),并且支持跨数据源的级联查询。select * from a join b where a.id = b.id #其中表a可以来自Hive,表b可以来自Mysql优势:(相对于Hive)Presto是一个低延迟高并发的内存计算引擎,相比Hive,执行效率要过很多。Presto以分析师的需求

2020-12-18 21:50:31 436 1

原创 【大数据】Hive

Hive概念Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并且提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive是建立在Hadoop上的数据仓库基础构架。提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。Hive与关系数据库的区别:Hive和关系数据库存储文

2020-12-14 21:30:39 244

原创 【MySQL】索引

索引索引索引Mysql索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。拓展:MyISAM: B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其d

2020-12-04 14:38:07 88

原创 【Mysql】数据库引擎

引擎存储引擎数据库引擎数据库引擎的定义数据库引擎的任务mySql引擎的类别ISAM引擎MyISAM引擎Heap引擎InnoDB引擎InnoDB与MyISAM对比存储引擎MySQL常见的两种存储引擎:MyISAM和InnoDB数据库引擎数据库引擎的定义访问数据库时,通过数据库引擎访问数据库文件。以关系数据库为例,发送SQL语句给数据库引擎,数据库引擎解释SQL语句,提取出需要的数据进行返回,数据库引擎就是SQL语句的解释器。数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可以控制访问

2020-12-01 20:44:18 153

原创 【测试】JUnit学习

Junit的概念JUnit断言JUnit断言包含在Assert类中,这个类提供了许多有用的断言方法编写测试用例。失败的断言会被记录断言机制:将程序预期的结果与程序运行的最终结果进行对比,确保对结果的可预知性//检查两个变量或者等式是否平衡void assertEquals(boolean expected, boolean actual)测试类原则测试方法上必须使用@Test进行修饰测试方法必须使用public void 进行修饰,不能带任何的参数新建一个源代码目录来存放测试代码,将测

2020-12-01 14:23:53 110

原创 【Java基础】类加载机制

类加载机制类加载的基本机制和过程类加载器ClassLoader就是加载其他类的类,负责将字节码文件加载到内存,创建Class对象。可以通过自定义ClassLoader实现一些强大灵活的功能:热部署不重启Java程序的情况下,动态替换类的实现,比如JavaWeb开发中的JSP技术就利用自定义的ClassLoader实现修改JSP代码即生效。应用的模块化和相互隔离不同的ClassLoader可以加载相同的类但互相隔离、互不影响。Tomcat利用这点在一个程序中管理多个Web应用,每个Web应用使用

2020-11-27 10:44:27 103

原创 【JVM】GC垃圾回收[精简版]

垃圾回收JVM内存区域判断需要对哪些对象进行垃圾回收(主要关注于Java堆)引用类型:强、软、弱、虚可达性分析算法判断是否回收对象垃圾收集算法与分代收集理论分代收集理论垃圾收集算法详述标记-清除算法标记-赋值算法标记-整理算法JVM内存区域判断需要对哪些对象进行垃圾回收(主要关注于Java堆)有两种方法:引用计数法(Reference Counting)(主流java虚拟机不使用此方法)给对象添加一个引用计数器,每次引用计数器值加1;当引用失效时,计数器值就减1;当计数器为0时,对象就是不可能

2020-11-26 10:56:48 107

原创 【Java基础】并发容器

并发容器写时复制的List和SetCopyOnwriteArrayListCopyOnWriteArraySetConcurrentHashMap并发安全原子复合操作高并发的基本机制写时复制的List和SetCopy-On-Write,即写时复制CopyOnWriteArrayListCopyOnWriteArraySetCopyOnwriteArrayList实现了List接口,它的用法与其他List(如ArrayList)基本是一样的。特点:线程安全,可以被多线程并发访问它的迭代

2020-11-24 10:41:02 93

原创 【测试】测试用例设计方法

测试用例设计方法黑盒测试边界值分析法等价类划分法白盒测试灰盒测试黑盒测试功能测试(数据驱动测试)检查程序功能是否按照规格说明书的规定正常使用。对于黑盒测试的这几种方法,总和策略是首先考虑边界值分析法。必要时用等价类划分方法。可以用错误推测法和场景法;如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用因果图法。拓展:黑盒测试的综合策略考虑边界值分析法,边界值分析法是在任何情况下都必须使用的方法,因为经验表明这种方法设计的测试用例发现程序错误的能力最强。必要时用等价类划

2020-11-23 21:45:57 242

原创 【Java基础】并发基础知识

并发基础知识线程的基本协作机制协作场景wait/notify生产者/消费者模式同时开始等待结束异步结果集合点小结线程的基本协作机制Java多线程协作的基本机制wait/notify,有多种典型的协作场景。协作场景生产者/消费者模式同时开始等待结束异步结果集合点wait/notifywait方法:public final void wait() throws InterruptedException//参数为0表示无限期等待public final native void wai

2020-11-23 10:32:46 92

原创 【源码剖析】HashMap的1.7与1.8的细节

HashMap版本细节1.8和1.7的变化1.8和1.7的变化1.8主要优化减少了哈希冲突,提高哈希表的存、取效率底层:JDK1.7:数组+链表JDK1.8:数组+链表+红黑树(节点长度大于8)扩容:JDK1.7:resize()方法负责扩容,inflateTable()负责创建表JDK1.8:resize()方法在表为空时,创建表;在表不为空时,扩容;对null值:JDK1.7:对于键为null的情况调用putForNullKey()方法。JDK1.8:没有区分键为null

2020-11-21 17:07:03 148

原创 【计算机网络】应用层相关协议

TCP对应的协议FTP:定义了文件传输协议,21端口Telnet:远程登录协议,23端口。用户可以以自己的身份远程登录到计算机上,可提供基于DOS模式下的通信服务SMTP:邮件传输协议,用于发送邮件,25端口。POP3,:和SMTP对应,POP3用于接收协议,110端口HTTP:Web服务器传送超文本到本地浏览器的传送协议,80端口UDP对应的协议DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。SNMP:简单网络管理协议,161端口。管理网络设备TFTP:

2020-11-20 21:20:01 943

原创 【客户端与服务器】Session和Cookie

Session与Cookie概念CookieCookie机制Cookie的使用Cookie的创建Cookie的不可跨域名性Cookie的编码Cookie的属性Cookie的有效期Cookie的修改、删除Session什么是SessionSession的生命周期Session的常用方法Session与浏览器禁用Cookie后,Session怎么办。Cookie和Session区别概念会话(Session)跟踪是Web程序常用的技术,用来跟踪用户的整个会话,常用的会话跟踪技术是Cookie和Session。

2020-11-20 20:30:45 144

原创 【JVM】垃圾收集器与内存分配策略

垃圾收集器与内存分配策略垃圾收集算法分带收集理论标记-清除算法标记-复制算法垃圾收集算法垃圾收集算法可分为“引用计数式垃圾收集”和“追踪式垃圾收集”分带收集理论分代收集名为理论,实质是一套复合大多数程序运行实际情况的经验法则,它建立在两个分代假说之上:(1)弱分代假说:绝大多数对象都是朝生夕灭的(2)强分代假说:熬过越多次垃圾回收过程的对象就越难以消亡。(3)跨带引用假说:跨代引用相对于同代引用来说仅极其少数这两个分代假说共同奠定了多款常用的垃圾收集齐的一致的设计原则:收集器应该将Java堆

2020-11-19 13:48:38 87

原创 【Java基础】并发包的基石

并发synchronized对各种类型的保护相关事项原子变量和CASAtomicInteger构造方法常用方法基本原理和思维实现锁ABA问题总结显式锁接口Lock可重入锁ReentrantLock基本用法使用tryLock避免死锁synchronized对各种类型的保护synchronized,隐式锁。(每个对象都有一个锁和一个等待队列,类对象也不例外)实例变量,synchronized加在实例方法上,实际保护的是同一个对象的方法调用(一般在保护变量时,需要在所有访问该变量的方法上加synchro

2020-11-19 12:55:02 398 1

原创 【MySql】概念

知识积累Mysql索引B+树B+树的细节与问题数据库索引采用B+树的原因Mysql索引B+树B+树,叶节点存放数据,其余节点用来索引。B+树更适合用来存储外部数据,即磁盘数据。尤其是关系型数据库,索引巨大,为了减少内存的占用,索引也会被存储在磁盘上。B+树的细节与问题B+树的查询时间:O(logn)与树的高度有关hash查找时间:O(1)hash比B+树查找时间更短,不用B+树的原因:查找1个值hash更快,但查找多条B+树效率更高,B+树索引有序,又有链表相连。数据库的索引一般再磁盘上,数

2020-11-18 22:41:47 82

原创 【计算机网络】进程之间的通信之Socket

Socket进程通信Socket部分总结进程通信两个进程如果需要通信,最基本的一个前提是能够唯一的标识一个进程,在本地进程通讯中我们可以使用PID来唯一标识一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候,需要其他方式。IP层的ip地址可以唯一标识主机,而TCP层协议和端口号可以唯一标识主机的一个进程,可以利用ip地址+协议+端口号 唯一标识网络中的一个进程。唯一标识网络中的进程后,它们就可以通过Socket进行通信了。Socket套接字Socket是应用层和传输层

2020-11-18 21:00:04 855

原创 【源码剖析】TreeMap和TreeSet

TreeMap和TreeSetTreeMap概念特点构造方法内部组成方法执行保存键值对 put根据键获取值查看是否包含某个值根据键删除键值对TreeMap总结TreeSet概念特点构造方法内部组成方法执行添加元素查看是否包含元素删除元素总结TreeMap概念特点基于红黑树实现的有序key-value集合,对元素自动排序(比较器)排序、无重复、重复值覆盖查找、插入、删除时间复杂度O(logn)线程不安全(线程安全问题使用ConcurrentSkipListMap)构造方法四个构造方法:

2020-11-18 11:24:13 103

原创 【源码剖析】HashMap和HashSet

HashMap和HashSetHashMap概念特点构造方法内部组成扩展策略方法执行保存键值对 put()查找方法 get()是否包含键是否包含值删除键值对遍历元素HashMap概念特点数组+链表+红黑树(JDK 8)不重复,可以为null(唯一),重复的键会重写value值。线程不安全构造方法三个构造方法,分别是:无参构造带一个参数initialCapacity初始容量的构造带两个参数initialCapacity初始容量和负载因子的构造 public HashMap(

2020-11-17 11:19:48 90

原创 【源码剖析】HashMap

HashMap基本概念特点JDK 8 的HashMap实现JDK1.7的HashMap实现内部组成(Java 8)源码剖析基本概念特点无序、线程不安全线程安全可用Hashtable,实现原理与HashMap类似,内部使用synchronized。高并发推荐使用ConcurrentHashMap需要保持添加顺序可用LinkedHashMap比较相同时,先比较hash在比较equalsJDK 8 的HashMap实现HashMap是 数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的。

2020-11-12 12:40:42 81 1

原创 【源码剖析】ArrayDqeqe

ArrayDququ基本概念特点方法源码剖析基本概念特点默认分配长度为16的数组。如果有参数numElements,如果numElements小于8,就是8如果大于等于8,分配的实际长度是严格大于numElements并且为2的整数幂的最小数。即如果numElements为10,实际分配为16,如果numElements为32,则为64。为了容纳numElements个元素,至少需要numElements+1个位置。如果tail的下一个位置是(tail+1)&(element

2020-11-12 11:00:25 90

原创 【牛客面经】SE基础部分

牛客面经SE基础部分基础关键字面向对象集合线程锁JDK反射GCSE基础部分基础关键字面向对象集合线程锁JDK反射GC

2020-11-12 08:48:20 109 2

原创 【剑指offer】镜像二叉树

题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:1. L->val == R->val2. L->left->val == R->right->val3. L->right->val == R->left->val设置一个递归函数,isSame(r1, r2),表示如果对称,返回true,否则返回false递归终止条件:r1 == null &&a

2020-11-12 08:47:48 56

原创 【JavaSE】泛型

泛型8 基本概念和原理一个简单泛型类基本概念基本原理泛型的好处容器类泛型方法泛型接口类型参数的限定上界为某个具体的类上界为某个接口上界为其他类型参数小结解析通配符更简洁的参数类型限定理解通配符超类型通配符。通配符比较8 基本概念和原理一个简单泛型类基本概念泛型就是类型参数化,处理的数据类型是不固定的,而是可以作为参数传入Object<T>其中的T就是传递的实际参数类型。参数类型可以有多个,如Object<U,V>多个类型之间用逗号分隔基本原理Java有Java

2020-11-11 15:02:51 102

原创 【TCP/IP】相关知识

TCP/IP五层协议OSI七层模型TCP/IP模型数据在各层之间的传递过程三次握手为什么不是两次握手四次握手五层协议应用层、传输层、网络层、数据链路层、物理层应用层:为特定应用程序提供数据传输服务,例如HTTP、DNS等协议。数据单位为报文。传输层:为进程提供数据传输服务。【由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。】传输层包括两种协议:传输控制协议TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段。TCP主要提供完整性服务。用户数据报协议UDP

2020-11-10 21:48:42 308 1

原创 【剑指Offer】二叉树的下一个结点

题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。红色数字是中序遍历的顺序。接下来,假设如果当前节点分别是1,2,…,7发现规律。1 => 2 // 显然下一结点是 1 的父亲结点2 => 3 // 下一节点是当前结点右孩子的左孩子结点,其实你也应该想到了,应该是一直到左孩子为空的那个结点3 => 4 // 跟 2 的情况相似,当前结点右孩子结点的左孩子为空的那个结点4 =>

2020-11-10 15:48:36 72

原创 【剑指Offer】52.正则表达式

题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配方法一:递归自顶向下:假设主串为s,长度为sn,模式串为p,长度为pn,位于模式串p当前的第i位来说,有‘正常字符’、‘*’、‘.’三种情况。如果p[i]为正常字符,那么我们看s[i]是否等于p[i],如

2020-11-09 14:02:21 161

原创 【Java基础】常用基础类

常用基础类包装类基本用法包装类的共同点重写Object方法Comparable包装类和String包装类基本类型byteshortintlongdoublefloatbooleanchar包装类ByteShortIntegerLongDoubleFloatBooleanCharacter字节数12488421基本用法装箱:Xxx.valueOf(xxx);拆箱:xxxValueOf(Xxx);Java 5 以后引入了自

2020-11-08 14:26:06 214

原创 【剑指Offer】51.构建乘积数组

题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。解题:两次循环第一次循环:求出B[i]的左边乘积和,Left[i-1],放入B[i]第二次循环,求出

2020-11-07 15:09:37 69

原创 【JVM虚拟机】Java内存区域与内存溢出异常

运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数区域。程序计数器(Program Counter Register)是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。在Java虚拟机模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。由于虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,

2020-11-07 14:20:21 137

原创 【面试汇总】

面试JavaSE基本概念面向对象特征:static关键字含义,是否可以覆盖private和static的方法?String不可变的?类的创建构造函数,构造函数重载?多态重载和重写的区别:多态类的拓展抽象类和接口的区别:静态类和成员内部类的不同基本方法Object类的方法hashCode()和equals()方法的联系。(原则)Comparable和comparator接口的作用与区别StringBuffer和StringBuilder集合List、Set、Map区别ArrayList、Vector、Link

2020-11-06 20:58:28 74

原创 【剑指Offer】50.数组中重复的数字

题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。返回描述:如果数组中有重复的数字,函数返回true,否则返回false。如果数组中有重复的数字,把重复的数字放到参数duplication[0]中。(ps:duplication已经初始化,可以直接赋值使用。)方法一:哈希值+遍

2020-11-06 16:02:08 63

原创 【剑指Offer】49.把字符串转成整数

题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述。输入一个字符串,包括数字字母符号,可以为空返回值描述:如果是合法的数值表达则返回该数字,否则返回0拓展:char字符’0’在ASCII中是481,2,3,…,9分别是:49,50,51,…,57.想得到对应字符串的数字,需要使用 char-‘0’思路:首先获取字符串的整负标记。从字符串首开始取,每次获取新字符,将新字符转换为0~9的值并与ret*1

2020-11-06 15:03:36 75

原创 【Java基础】异常

异常常见异常NullPointerException(空指针异常)NumberFormatException(数字格式异常)异常类Throwable异常类体系:常见异常NullPointerException(空指针异常)当发现异常如s的值为null,启动异常处理机制,首先创建一个异常对象,查找看谁能处理这个异常,如果没有,则java启动默认处理机制,即打印异常栈信息到屏幕,并退出程序。异常栈信息包括了从异常发生点到最上层调用者的轨迹,还包括行号。NumberFormatException(数

2020-11-06 09:29:12 113

原创 【剑指Offer】48.不用加减乘除做加法

题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。按位与&,按位或|, 按位异或^补码计算机中存整数n是用补码存的。如果n为正数,则原码=反码=补码如果n为负数,则补码=反码+1方法:位运算使用位运算来实现两数的加法。设两数字的二进制形式a, b,其求和s = a + b, a(i)代表a的二进制第i位,则分为以下四种情况:观察发现,无进位就是按位异或(^)结果,进位就是与运算(&)结果,但是需要左移一位,因为进位影响下一位运

2020-11-05 17:04:00 68

原创 【剑指Offer】47.求1+2+3+...+n

题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。方法:递归变形-不能使用if,使用&&,当左边为false时,右边不执行。 public int Sum_Solution(int n) { boolean f = (n!=0) && (n+=Sum_Solution(n-1))!=0; return n; }...

2020-11-05 16:16:52 66

空空如也

空空如也

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

TA关注的人

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