自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剪绳子 题目解析

题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入8输出18public class So

2020-07-22 15:41:50 529

原创 python编程 1

1.python是跨平台的,他可以运行在windows,Mac和各种Linux系统上面,在Windows上写Python程序放到Linux是能够运行的2.安装python后你会得到一个解释器(就是负责运行python程序的),一个命令行交互环境,还有一个是简单的集成开发环境3.最新的PYTHON以3.8为基础,2.x和3.x是不兼容的4.打开命令提示符窗口,敲入python,就进入Python交互式环境了,>>>是提示符,输入任何代码,回车输出结果,输入exit()会退出交互式

2020-05-14 20:41:07 288

原创 软件测试必掌握linux指令

1.Linux命令严格区分大小写(一般都默认小写)2.Linux所有的内容都是以文件形式保存的,不考扩展名区分文件类型3.命令之间有空格4.命令之间是有空格的permission denied:拒绝访问,没有权限,去向配置管理员申请权限command not found:大部分就是命令写错了1.su:不退出登录的情况下切换用户的命令 su root,之后输入密码普通用户切换到超级管理员,$普通用户,#跟用户 【用户名@localhost ~】$ localho...

2020-05-14 20:39:09 324

原创 java 类加载器

类加载器1.对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,同一个类不同的类加载器加载出来的是不一样的。2.每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通俗一些:比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等双亲委派模型1.从Java虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动

2020-05-14 20:37:33 176

原创 java对象探秘

对象的创建在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程,(类不一定是用到的时候才加载,会有一个预判,预期可能会用的话会加载出来,但是如果在加载的时候出错,那么只在第一

2020-05-14 20:36:56 167 1

原创 java虚拟机类加载机制

什么时候要进行类加载在虚拟机规范中并没有强制规定,靠虚拟机的具体实现来进行自由把握类的加载就是将class文件加载到内存中,并建立class对象与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。java程序,编译的时候只会编译成class文件,类加载是运行期

2020-05-14 20:35:59 165

原创 垃圾收集算法

1.标记-清除算法标记处所有需要回收的对象,标记完成之后统一回收所有被标记的对象不足之处:效率问题,标记和清除两个过程的效率都不高,空间问题:会产生很多内存碎片,以后在分配比较大的对象空间时,找不到足够的连续内存不得不触发另一次垃圾收集动作,2.复制算法(新生代)将可用内存按容量划分为大小相等的两块,每次只使用其中的一块,当这一块的内存用完了,就将活着的对象赋值到另外一块上面,然后把已经使用过的内存空间一次性清理掉,这样每次都是对于整个半区进行内存回收,这样就不用考虑内存碎片等问题,不足

2020-05-14 20:35:02 173

原创 垃圾回收的方法(详细)

内存自动回收程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译器进行一些优化,但在本章基于概念模型的讨论中,大体上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。垃圾收集器回收:我们只有在程序处于运行期间时才能知道会

2020-05-14 20:34:27 478

原创 JVM运行时数据区

程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成线程私有虚拟机栈1.(与线程的生命周期相同,私有)放栈帧(与方法的生命周期相同),栈帧里面有局部变量表(我们常说的栈就只这里,基本数据类型,对象引用),操作数栈,动态链接(运行会,将符号引用转换为直接引用)方法出口(两

2020-05-14 20:32:26 115

原创 IP路由选择

IP的路由选择IP的路由选择是逐跳的进行的,从这个路由表信息看出,IP并不知道任何到达目的路径的完成路径(除了与主机直接相连的)所有的IP路由选择只是为数据报传输提供下一站路由器的IP地址,它嘉定下一站的路由器比发送的主机更接近目的地,路由选择主要完成以下功能:1.搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配),找到直接把报文发给该表目指定的下一站路由器或者直接连接的网络接口2.子网掩码:32位为1的留给网络号,为0留给主机号ARP是动态映射的ARP代理:.

2020-05-14 20:31:23 704

原创 交换机和路由器的区别

工作层次不同,传统的交换机是工作在数据链路层,而路由器是工作在网络层,可以得到更多的协议信息,路由器可以做出更加智能的转发决策,交换机是利用物理地址就是Mac地址来确定转发数据的目的地址路由器则是利用不同网络的IP地址来确定数据转发的地址路由器(网络层寻址)中有一个路由表,里面有他的寻址信息,它收到数据包后,会根据路由表和驯鹿算法讲述局发到下一站(可能是路由器,交换机,或者目的主机(服务网都在公网上))交换机里面有一张Mac表,他会根据自己收到的数据帧的首部信息内的Mac地址在自己的表中查找

2020-05-14 20:29:03 376

原创 URL URI IP域名

URI与URL与 URI(统一资源标识符)相比,我们更熟悉 URL(UniformResource Locator,统一资源定位符)。URL 正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。2.URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。可见 URL 是 URI 的子集。3.URI:对任意抽象或物理资源进行完整表示的字符序列 URL:除了标识资源可用的位置之外,URI的一个自己描述了访问该资源的主要机制举...

2020-05-13 17:01:35 791

原创 http协议

TCP和IP只是解决了数据的传送,相当于在淘宝上买东西,写好地址后,顺丰给你送过来,这个就是TCP/IP的作用,但是还要使用这个东西,对数据加工处理或者使用,所以还需要一层协议就是http协议,不关心通信的细节,关心应用的细节HTTP协议(是一个无状态协议,超文本传送协议)http协议是一个无状态协议,就是说着一次请求和上一次请求是没有任何关系的,互不认识,没有关联。这种无状态的好处就是快速,坏处就是需要进行用户状态保持的场景是因为应用的场景不多所以,应用层协议也是有不同种类的,网页文件信.

2020-05-13 16:59:33 403

原创 DNS应用【MOOC4】

DNS:域名系统Internet上主机/路由器的识别问题网络层之下用IP地址,人用的域名,DNS做这个映射域名解析系统DNS 是一个依赖层次性的分布式数据库多层命名服务器构成的分布式数据库应用层协议:完成名字的解析实现的是Internet的核心功能,用应用层协议实现DNS服务:1.域名向IP地址的翻译2.主机别名把不好记的名字变成好记的名字3.邮件服务器别名4.负载均衡:Web服务器 大的门户网站向外提供web服务,显然不是一个服务器能提供的,它有一个...

2020-05-13 16:50:50 204

原创 Email应用【MOOC3】

Email应用的构成组件1.邮件客户端2.邮件服务器3.SMTP协议邮件客户端读,写Email消息与服务器交互,收,发Email使用web email的时候浏览器本身就是邮件客户端邮件服务器给每个人用户一个邮箱消息队列:储存等待发送的EmailSMTP协议(服务器之间) 邮件传输协议邮件服务器之间传递消息所使用的协议客户端:发送消息的服务器服务器:接受消息的服务器采用邮件服务器有什么好处,为啥不两个人建立连接,然后发出去邮件的客户端(手..

2020-05-13 16:49:33 892

原创 web应用【MOOC】

第六节课:HTTP请求和响应消息格式:为啥都已经建立连接了,还有些host属性,还要写主机域名TCP连接都建立了为啥还声明访问的主机缓存和代理服务器会使用这个信息,除此之外确实没啥用user-agent: 浏览器版本请求消息还要携带数据吗?比如登录时,请求消息就要携带数据get是获取网页什么时候用post呢网页经常需要填写表格,然后就会在请求消息的消息体上传客户端的输入,传给服务器。服务器把数据提出来,get是放在URL上get也可以上传叫 URL方法,如果.

2020-05-13 16:45:12 245

原创 网络应用和web应用 【MOOC】

第一节课网络应用:qq微信支付宝百度云:在网上开辟一个虚拟的硬盘空间,我们可以保存信息在上面、网络应用有哪些特点:与单机应用有哪些本质不同?网络应用首先要有基础环境,一部分软件跑到我们自己的机子上,一部分抱在服务器上面比如浏览器跑在我们的机子上,还有一些软件跑在就是某个硬件服务器上,他们之间交互就构成了我们网络应用网络应用的体系结构:有三个1.客户机/服务器结构(C/S)2.点对点结构 PtoP结构3.混合结构C/S有一个功能的划分,一个使用服务,...

2020-05-13 16:44:26 477

原创 传输层【观看韩老师讲网络笔记】

网络层IP协议就是选路的协议(RIP,OSPF,BGP)这些协议统称为IP协议 ICMP IGMP ARP传输层:TCP协议 UDP协议应用层协议:HTTP HTTPS DNS传输层协议的两个应用场景:TCP:分段,编号,添加端口号,流量控制,建立连接保证可靠性,面向连接 确认应答,超时重传,拥塞窗口,滑动窗口,发送缓冲区,接受缓冲区UDP:不标号,一个数据包就能完成数据通信,不建立连接,多播域名解析时,会把数据包扔出去,百度的地址是多少,一...

2020-05-13 16:39:59 144

原创 网络层协议【观看韩老师讲网络笔记】

网络层的服务有两种虚电路和数据报服务虚电路,就是路径已经设置好了,需要连接,不需要mac地址就可以传,但是只有一条路径,如果这条路径断了,那就不能传送了,可靠性由网络来决定数据报服务:无连接不可靠,可靠性有上级维护,每个数据报是独立发送,路径是路由器根据路由表临时决定的,不知道完成路径,也不确定到达顺序,因为走的路径不一样网关就是:一个接口,局域网到广域网,一个电脑也可以加多个网关,网关就是路由器的哪个接口,现在说的网关就是路由器的一个接口,路由器的地址,具有路由功能的IP地址--路由器网.

2020-05-13 16:32:13 254

原创 数据链路层【观看韩老师讲网络笔记】

1.数据传输时,数据包传到路由器,路由器的链路层判断是不是给自己的,如果不是给自己的,去网络层寻址,走哪个口发出去,如何转发,找到后数据又要层层封装,源MAC和目的MAC要改变,去发给下一站2.网关是指上是一个网络通向其他网络的IP地址,网关的地址是具有路由功能的IP地址3.数据链路层使用的两种信道:点对点信道,两个笔记本用网线一接,没有其他东西,广播信道:中间有一个设备接起来了,叫做广播信道,广播信道上的主机很多,所以必须使用专门的共享信道协议来协调这些主机的数据发送4.链路:物理一条

2020-05-13 16:29:30 330

原创 TCP缓冲区 流量控制 拥塞控制

接受缓存区:已收到,但还未处理的数据发送缓存区:已发送,但还未应答的数据创建一个TCP的socket, 同时在内核中创建一个 发送缓冲区 和一个 接收缓冲区;1.调用write时, 数据会先写入发送缓冲区中;2.如果发送的字节数太长, 会被拆分成多个TCP的数据包发出;3.如果发送的字节数太短, 就会先在缓冲区里等待, 等到缓冲区长度差不多了, 或者其他合适的时机发送出去;4.接收数...

2020-01-13 23:37:12 467

原创 TCP之四次挥手

为啥需要4次挥手因为TCP的连接是全双工的,所以,每一段都需要对读写部分分别进行关闭第一次关闭的是关闭主动方的写端(发送端),关闭被动方的读端(接收端)第二次关闭的是被动方的写端(发送端),关闭主动方的读端(接收端)一般来说都是客户端作为主动方来断开连接四次挥手的步骤1.客户端调用close等函数主动关闭,并向服务端发送FIN报文(当一个连接被建立或者被终止的时候,交换的报文...

2020-01-13 16:38:08 183

原创 TCP滑动窗口

滑动窗口(多线程)1.窗口大小指的是无需等待确认应答而可以继续发送数据的大值.上图的窗口大小就是4000个字节(四个 段). 窗口大小可以变,可以动态调整2.发送前四个段的时候, 不需要等待任何ACK, 直接发送;3.收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;4.操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区来记录当前还有哪些数据...

2020-01-13 08:43:22 162

原创 TCP三次握手

三次握手三次握手的主要目的建立客户端和服务端的连接,就是验证服务端和客户端的具有正常的接受和发送能力第一次握手:客户端发送网络包,服务端接受了,服务端得出结论:说明客户端的发送能力,服务端的接受能力是正常的第二次握手:服务端发包,客户端收到了客户端得出结论说明服务端的接受,发送能力,客户端的发送,接受能力正常在客户端的角度来看,我接受到了服务端的数据包,说明服务端收到了我在第一次...

2020-01-13 08:34:00 183

原创 Comparator

package lesson6;import java.util.*;public class SortTest { /** * int[]数组使用Arrays.sort方式 */ public static void sort(){ Person p1 = new Person("a", 11); Person ...

2019-11-24 18:35:08 107

原创 创建10个线程循环打印ABC(两种方法) 多线程(5)

package Lesson5;//三个线程打印十次 ABC ABCpublic class SequencePrint2 { private volatile static String[] INFOS={"A","B","C"}; private volatile static int index; //数组下标 public static void ...

2019-11-24 18:20:33 368

原创 wait() notify() notifyAll() 多线程(4)

1.volatile关键字:建立了一个内存屏障 防止重排序,线程内部,自己看起来全是有序的, 但是为了性能优化,jvm,cpu都是进行了重排序的这些指令在其他线程看起来,全是乱序的;2.wait(),notify(), notifyAll(),(doushin )都是用在synchronized同步块里面使用,编译会通过,但在外面使用会抛异常3.锁对象.wait(),作用在锁对象 调...

2019-11-24 18:05:58 142

原创 Integer和int 常量池问题

Java的8种基本类型Byte, Short, Integer, Long, Character, Boolean, Float, Double, 除Float和Double以外, 其它六种都有常量池,,只在大于等于-128并且小于等于127时使用常量池1.int i=128;integer i2=128,相等 自动拆装箱int和integer 自动拆装箱不管值超不超范围,都相...

2019-11-24 17:24:31 1615

原创 字符串数组 字符串 字符 数字转换

数字字符串 s 转成int型数组首先将字符串转成char数组 char[] a=s.toCharArrayfor(int i=0;i<s.length();i++){ c[i]=s.charAt(i);}定义一个同字符串长度的int数组 int a[]=new int[s.length()];for(int i=0;i<s....

2019-11-22 23:34:20 170

原创 位运算加法

public int addAB(int A, int B) { // write code here while(B!=0){ //A异或B,只要有1就为1,相比A+B只是该进位的地方没有进位 int a=A^B; //A与B,都是1才为1,左移1位相当于乘以2的n次方 ...

2019-11-22 16:00:23 95

原创 单例模式 饿汉模式 懒汉模式 多线程(3)

package Lesson4;//面试 线程安全//单例public class SingleTon { //返回单例实例 饿汉模式 private SingleTon(){ //一定要写出来,不能在外部new对象 写成private } //饿汉模式 private static final SingleTon SING...

2019-11-19 13:05:34 149

原创 SafeThread 用synchronized达到线程安全 多线程(3)

package Lesson4;import java.util.ArrayList;import java.util.List;public class SafeThread { public static int COUNT; //默认0 public static void main(String[] args) { ...

2019-11-19 13:02:22 126

原创 线程不安全三大特性 原子性,可见性,有序性 synchronized和volatile关键字 --多线程(3)

线程考虑效率和安全问题1.多线程使用场景:多线程在处理耗时比较长的任务(创建线程也耗时,所以如果任务指向时间比较短,没必要使用多线程) 单核cpu时,处理多个任务的时候,有时间片调度的操作,所以不太实用多线程,效率更低2.Thread.sleep(long时间):从运行状态转变为超时等待状态,时间到了,变成就绪状态3.只有线程发生阻塞,调用thread2.interrupt()才会发...

2019-11-19 12:58:20 238

原创 求n位数格雷码(代码及详解)

import java.util.Arrays;public class 格雷码二进制 { //求n位数的格雷码 //递归思路为求n-1的格雷码,n-2的格雷码 //返回值为n位数的格雷码的数组 public String[] getGray(int n) { //每一位都有2种可能,所以总的格雷码的数量为2的n次方,也是结果数组的长度 ...

2019-11-19 12:18:33 788

原创 多线程(2)

1.Thread类的静态方法只作用于当前代码范围的线程2.创建并启动线程,会在操作系统中真实的创建并申请系统调度该线程,在申请后由CPU时间片调度执行(就绪态到运行态)。其中创建线程是比较耗时的3.多线程一般是使用多个CPU的时候,而且比较耗时的时候是使用多线程的线程的状态1.new只是new了一个线程,但是没有运行(只是安排了工作,还未开始行动)2.Runnerable 可运行状态...

2019-11-16 13:52:46 120

原创 阻塞线程---多线程(2)

package Lesson2;public class InterruptThread { public static void main(String[] args) { /* Thread thread=new Thread(new Runnable() { @Override public vo...

2019-11-16 13:34:18 178

原创 创建线程 阻塞线程 sleep() join() Interrupt();---多线程(2)

package Lesson2;public class MyThread { public static void main(String[] args) throws InterruptedException { //匿名内部类,创建线程 Thread thread=new Thread(new Runnable() { @...

2019-11-16 13:32:11 154

原创 匿名类创建线程--多线程(1)

package lesson1;public class Sequence { public static void main(String[] args) { //启动0-9编号的十个线程,每个线程打印它的编号 for(int i=0;i<=100;i++){ final int j=i; //类...

2019-11-16 13:27:53 100

原创 创建10个线程,打印十个数字--多线程(1)

package lesson1;public class CreateThread2 { public static void main(String[] args) { int num=10; //共享数据10;每一个线程里面-1 MyRunner2 myRunner2=new MyRunner2(num); //my...

2019-11-16 13:26:13 2280

原创 创建线程(详解)--多线程(1)

package lesson1;//不管是继承类还是实现接口,都要使用Thread方法public class CreateThread { //实现MyThread类的线程开始 public static void main(String[] args) { MyThread t=new MyThread(); t.start();//显示的...

2019-11-16 13:24:06 127

空空如也

空空如也

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

TA关注的人

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