- 博客(71)
- 收藏
- 关注
原创 【MySQL】索引和事务
B+树存在的前提,是使用了 innodb 这个存储引擎,mysql支持多种存储引擎,不同的存储引擎使用的索引的数据结构是不同的,innodb是最常用的,也是面试考的。B+树的结构是一直存在的,如果你定义了主键,自然就是按照主键来建立B+树;如果你没有定义主键,会有一个自带的隐藏的列,来建立B+树。给定一个表:student(id int primary key, name varchar(20), classId int);那么MySQL就会根据主键(id)来构建B+树。
2024-10-21 23:04:28 1194
原创 【MySQL】增删改查-进阶(二)
数据库约束表的关系一对一:一对多:多对多:需要创建中间表来映射两张表的关系新增查询聚合函数:MAX、MIN、AVG、COUNT、SUMselect ... from 表1,表2 where 条件-- inner可以缺省select ... from 表1 join 表2 on 条件 where 其他条件分组查询:GROUP BY… HAVING …select ... from 表1 left/right join 表2 on 条件 where 其他条件内连接。
2024-10-19 11:15:54 1164
原创 【MySQL】增删改查-初阶
语文成绩降序排序:针对表达式排序:order by后面的表达式不一定非要在select列名这里出现,就以总成绩排序,只显示id和name。
2024-10-11 16:43:17 1448
原创 【MySQL】数据库的介绍以及数据库基础
SQL本质是一个"编程语言",专门用来操作数据库的编程语言,和Java,C之类的画风差别很大。SQL是各个数据库之间通用的,各种数据库使用的语言都是SQLMySQl是一个"客户端-服务器"结构的程序,很多场景,是需要多个程序相互配合,完成一系列的工作,这个过程中,多个程序之间,往往会使用网络进行通信(这些在前面已经具体讲述过)。客户端(Client):主动发起请求的一方服务器(Server):被动接收请求的一方请求(Request):客户端主动给服务器发送的数据。
2024-09-26 14:11:09 1671 1
原创 【软件测试】性能测试-概念篇
性能测试和功能测试都是在系统测试阶段进行,那么这两者有什么区别呢?案例1:五菱和法拉利都是汽车厂商生产的汽车,从功能上说,它们都有四个轮⼦一个方向盘,能够坐在里面往前开,有挡风玻璃能够遮风挡雨。从性能来说,五菱的座椅材质可能是人造皮,法拉利是真皮;速度从0-100km/h,五菱可能需要⼗几秒,而法拉利只需要几秒,这就是性能的区别。对于一个事情来说,能做是一回事,做的好不好又是另一回事情。就跟做饭一样,能不能吃是一回 事,好不好吃又是另一回事。
2024-09-22 12:12:40 897
原创 【软件测试】自动化测试常用函数 二
我们分别去查看"迪丽热巴"文本标签和"邓紫棋"文本标签,发现两个标签是一样的,也就是程序执行的速度太快了,隐式等待的作用只是看一下元素是否存在,而不是元素对不对,所以上述代码的隐式等待只会查找你的输入框,按钮,文本是否存在,对于点击,清空,输入不会管,当查找到"邓紫棋"文本标签时,"邓紫棋"还没有输入呢,这当然能找到,但是迪丽热巴的名字。selenium无法识别非web的控件,上传文件窗口为系统自带的,无法识别窗口元素,但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的。
2024-09-18 20:53:13 1599
原创 【软件测试】自动化测试-概念篇
自动的代替人的行完成操作。自动化在生活中处处可见自动洒水自机,主要通上水就可以自动化洒水并且可以自动的旋转。自动洗手液,免去了手动挤压可以自动感应出洗手液超市自动闸门,不需要手动的开自关门生活中的。软件中的自动化测试也是如此,通过自动化测试有效减少人力的消耗的同时也提高了测试的质量和效率(因为人工测试结果是不可控的)。自动化的主要目的就是用来进行回归测试。回归测试是什么要讲到位。
2024-09-12 14:03:06 1512
原创 【软件测试】测试的分类
安全性测试的方法有代码评审,渗透测试,安全运维等,常用的静态安全测试工具有,Coverity, IBMAppscanSource,HPFortify,常用的动态安全测试有OWASP的ZAP,HPWebInspect等。软件测试是软件生命周期中的一个重要环节,具有较高的复杂性,对于软件测试,可以从不同的角度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试工作进行更好的执行和管理测试的分类方法。白盒测试的测试目的是,通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;
2024-09-10 16:40:31 1517
原创 【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收
此时a中就为null,意味着0x100中的引用计数器就为1,b为null,意味着0x200中的引用计数器就为1,这时候这两个对象相互指向对方,就导致了两个对象的引用计数都为1(不为0,不是垃圾),但是你外部代码也无法访问这两个对象!接下来:a.t = b,进行引用复制,把b里面的地址复制给Test类中的引用类型的成员,也就是把b地址复制给a对象中t成员,此时就有两个引用指向0x200了,那么0x200中的引用计数器就为2。=> 修改t的指向,new Test对象没有引用指向了,就视为垃圾。
2024-09-03 18:25:48 1577
原创 【JavaEE初阶】HTTPS协议加密过程
HTTPS 工作过程中涉及到的密钥有三组第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.
2024-08-31 16:44:28 965
原创 【JavaEE初阶】HTTP响应报文
就相当于手机号码中的 “呼叫转移” 功能. 比如我本来的手机号是 132-1234-5678, 后来换了个新号码135-1234-5678, 那么不需要让我的朋 友知道新号码, 只要我去办理一个呼叫转移业务, 其他人拨打 132-1234-5678 , 就会自动转移到 135-1234-5678 上.例如在发送的请求中,带有GET/POST,服务器的代码逻辑就需要处理上述请求,假如服务器没有实现对应的逻辑,比如你只实现了处理GET,没实现处理POST,此时你发送POST就可能得到405.
2024-08-30 15:57:46 1083
原创 【JavaEE初阶】HTTP请求(Request)
1.Cookie是啥?浏览器本地存储数据的一种机制(不是唯一的一种,只是典型的一种)。2.Cookie怎么存储?按照不同的域名,分别存储在硬盘上的,不同域名之间的cookie互不干扰,键值对使用文本存储,键和值之间都是程序员自定义的。3.Cookie从哪里来?Cookie (中存储的数据)从服务器来: 第一次登陆一个网站的时候, 服务器会返回一个响应, 在这个响应报文中, 通过 Set-Cookie 把需要存储的值返回给客户端, 客户端进行存储。
2024-08-29 20:31:44 843
原创 【软件测试】软件测试生命周期与Bug
软件测试的生命周期如何描述一个bug描述bug的要素如何定义bug的级别bug的生命周期与开发起争执了怎么办。
2024-08-28 21:05:03 1447
原创 【JavaEE初阶】HTTP协议与使用Fiddler抓包
由抓包可知协议格式如下HTTP 报文中此处存在的 "空行"是因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 “报头的结束标记”, 或者是 “报头和正文之间的分隔符”.HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 “粘包问题”.总结:HTTP协议,请求格式和响应格式需要重点掌握,是我们日常开发中加面试的重点。
2024-08-26 18:39:17 905
原创 【JavaEE初阶】IP协议
那如果这两台主机的端口号碰巧是一样的(端口号碰巧一样,是小概率事件),现在我们这个数据,经过运营商路由器进行NAT的替换,注意,此时的映射表,旧端口的两台主机仍然是1234,但是第二台主机的新端口还是让他为5678。此时约定,公网IP唯一,私网IP允许在不同局域网中重复,虽然能上网的设备很多,绝大部分IP都在局域网内,也就是局域网1中的设备IP和局域网2中的设备IP可以重复。那么32位也表示42亿9000万,原则上来说,不同设备,IP地址应该是唯一的,不重复,上述这个数字,在今天来说,显然是不够用的!
2024-08-24 21:33:12 903
原创 【JavaEE初阶】滑动窗口和流量控制以及拥塞控制
窗口大小是可变的,可以通过窗口大小,来控制发送方的速度,窗口越大,单位时间发送的数据越多,越高效,窗口越小,单位时间发送的数据越少。滑动窗口说是"提升效率"的机制,更准确的说,是"亡羊补牢"的机制,TCP为了保证可靠性,牺牲了很多效率,引入滑动窗口,是效率上的牺牲变少一些,但是仍然是存在牺牲的,在怎么滑动窗口,速度不可能比UDP这种没有可靠机制的协议更快。接收方会返回ACK,在ACK的报文中,在TCP报头里,指定一个字段,表示上述的空间大小,这个字段这个是报头中的16位窗口大小。
2024-08-23 14:09:22 1107
原创 【JavaEE初阶】TCP协议
TCP(TransmissionControlProtocol 传输控制协议)是一种面向连接的、可靠的、面向字节流,双全工的传输层通信协议。这几个特点在我们前面写得TCP服务器和客户端的搭建中,代码能够直观的感受到,但是这个可靠传输我们是无法直观的感受到的,但是这个特性其实是TCP最核心的部分!!!本文章就来谈谈关于可靠传输具体是怎么回事!
2024-08-21 21:56:52 1007
原创 【JavaEE初阶】UDP协议
前面讲述过,对于UDP协议来说,当应用层数据到达UDP之后,就会给应用层数据报前面拼装上UDP报头。UDP数据报 = UDP报头 + UDP载荷。本篇文章就来讲述UDP包头里面所存储的信息。
2024-08-19 15:26:37 654
原创 【JavaEE初阶】TCP服务器和客户端的搭建
代码:如果代码这样写,while下面的try就不能这样写,如果这样写当我们start之后,clientSocket就立即关闭了,而process里面的clientSocket可能还正在用,所以还是使用上述的finally。上述代码解决了多个客户端与一个服务器通信的问题,但是呢,在实际应用中,要是客户端太多,且客户端都不退出通信,这时候服务器被占满了,后续就无法处理个更多客户端。TCP 传输的是字节流,就是传输字节,传输的基本但是就是byte,所以不需要想udp那样创建一个udp数据报进行传输。
2024-08-18 16:33:16 797
原创 【JavaEE初阶】UDP客户端和服务器的搭建
整体代码:注意:当程序启动之后,代码执行到receive的时候,如果没有客户端发送请求,服务器的代码就会在这里阻塞(跟锁关系不大,这里的阻塞都是系统内核控制的),直到说有客户端发来请求。运行程序: 通过jconsole查看:
2024-08-17 16:14:42 1466
原创 【JavaEE初阶】网络编程基础与Socket套接字
网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程特殊的情况,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。但是,我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源:进程A:编程来获取网络资源进程B:编程来提供网络资源。
2024-08-16 22:02:37 1020
原创 【JavaEE初阶】网络原理的初识
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。有时候称为四层是没算物理层,由于物理层和数据链路层关系非常紧密,很多时候,谈到数据链路层也会涉及到很多物理层的东西,另一方面站在程序员的角度来看,物理层是纯硬件,上面四层才是软件。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。
2024-08-15 17:31:37 880
原创 【JavaEE初阶】文件内容的读写—数据流
关于文件内容操作:读文件,写文件,打开文件,关闭文件。在Java 中通过"流"(stream 流)这样的一组类,进行上述的文件内容操作。
2024-08-13 20:53:24 815
原创 【JavaEE初阶】线程安全的集合类
我们之前讲过的集合类,,大部分都不是线程安全的.Vector, Stack, HashTable, 是线程安全的(都是自带了synchronized,不建议用), 其他的集合类不是线程安全的。注意:加锁不能保证线程一定安全,不加锁也不能确定线程一定不安全,具体代码具体分析为什么不建议使用呢?因为我们在使用的时候,这些类就会自动的加锁,虽然编译器会自动优化为没有锁竞争的线程进行锁消除的优化,但是呢万一编译器没有优化好,就麻烦了。
2024-08-09 22:55:56 1365
原创 【JavaEE初阶】JUC(java.uitl.concurrent)的常见类
之前讲到Runnable接口,用于描述一个任务,通过Runnable中的run方法来体现的,但是描述的任务没有返回值(run方法是返回void),此处的Callable接口与Runnable接口类似,Callable里面的call方法是有返回值,表示这个线程执行结束要得到的结果是啥比如我们有以下需求创建线程计算 1 + 2 + 3 + …
2024-08-09 21:40:02 587
原创 【JavaEE初阶】CAS(比较和交换)
CAS: 全称Compare and swap,字面意思:"比较并交换"这是一条 cpu 指令,就可以完成比较和交换这样的一套操作,那么对于cpu的一条指令操作,我们知道这是"原子的",这就给我们编写线程安全的代码,打开了新世界的大门。CAS的流程:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。比较 A 与 V 是否相等。(比较)如果比较相等,将 B 写入 V。(交换)返回操作是否成功。
2024-08-09 18:09:19 978
原创 【JavaEE初阶】常见的锁策略及synchronized实现原理
接下来讲解的锁策略不仅仅是局限于 Java . 任何和 “锁” 相关的话题, 都可能会涉及到以下内容. 这些特性主要是给锁的实现者来参考的.普通的程序猿也需要了解一些, 对于合理的使用锁也是有很大帮助的所说的策略,是这把锁,在加锁/解锁/遇到锁冲突的时候,都会怎么做,"策略"可以理解为"做法"。
2024-08-08 20:24:21 1064
原创 【JavaEE初阶】定时器
定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码定时器是一种实际开发中非常常用的组件.比如网络通信中, 如果对方 500ms 内没有返回数据, 则断开连接尝试重连.比如一个 Map, 希望里面的某个 key 在 3s 之后过期(自动删除).类似于这样的场景就需要用到定时器。
2024-08-07 22:19:14 571
原创 【JavaEE初阶】线程池
1,使用没有共享资源的模型2,适用共享资源只读,不写的模型不需要写共享资源的模型使用不可变对象3,直面线程安全(重点)保证原子性保证顺序性保证可见性。
2024-08-07 18:35:30 860
原创 【JavaEE初阶】阻塞队列
虽然生产者是每隔1s生产一个元素,但是消费者里面会跟着生产者的节奏进行打印,消费者没有sleep,take自带的阻塞特性,也使消费者处于一个比较慢的速度进行消费。如果说入队只入了一个元素,出队的时候出两次,那么第二次打印的时候,此时的take就被阻塞到了,一直阻塞到有其他线程往这个队列里面插入元素为止。一瞬间就生产了1000个元素,此时队列就满了,要想在生产元素只能消费一个元素之后,才能生产一个元素......谁慢,另一个就将就谁。当队列空的时候, 继续出队列也会阻塞, 直到有其他线程往队列中插入元素。
2024-08-02 17:51:15 977
原创 【JavaEE初阶】懒汉模式与饿汉模式及指令重排序问题
注意:之前谈到的 volatile 的优化问题,不是100%触发的,可能触发,可能不触发,上述代码考虑的是不触发优化的情况,如果触发优化的情况,需要再来一手 volatile。接下来,上述代码是已经把唯一实例准备好了,万一其他代码又new了这个类的实例怎么办,所以我们就需要禁止外部代码来创建该类的实例,在Singleton类里面在创建一个构造方法即可,里面可以什么都不写,但是必须要由private修饰(核心)。饿汉模式,就是它很饿,它的对象早早的就创建好了。上面的懒汉模式的实现是线程不安全的.
2024-07-31 16:37:54 1194
原创 【JavaEE初阶】线程安全之内存可见性->volatile,wait(),notify()
1号滑稽老铁在里面发现ATM机里面没有钱,他就要退出来,当1号滑稽老铁出来之后,按理说应该是2号滑稽老铁进去,但是1号滑稽老铁出来之后觉得不对,感觉是自己操作错了,就在2号滑稽老铁进去之前,抢先一步又进去了,然后门又锁上了,那么2号滑稽老铁只能继续等待,1号滑稽老铁进去之后发现确实取不出来,就又退出来了,2号滑稽老铁刚要进去,1号滑稽老铁又抢先一步进去了,1号滑稽老铁就在这里进进出出,此时2号滑稽老铁已经后面的滑稽只能继续阻塞等待。对于程序的效率肯定是有影响的。
2024-07-30 18:05:22 1185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人