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

原创 ES5中基于原型链实现继承

一、ES6中的继承在ES6中提出了class的概念,同时也有了extends继承。但是ES6中的class以及extends都只是语法糖,其底层实现依然是用过原型链来实现的。我们先看一段ES6中的代码。class Person{ constructor(name,age) { this.name=name; this.age=age; } run(){ console.log("running") } show(p){ console.log(`我叫${this.name

2021-09-17 19:31:53 282

原创 JavaScript-详解原型和原型链

1、原型的意义JavaScript这门语言在设计之初并没有类的概念(目前也是),那么没有类是如何有对象的呢?回答这个问题之前,我们想先一下,类在创建对象的过程中发挥了什么作用呢?通过面向对象的学习,我们知道类提供的是数据模板,所谓的对象就是通过该数据模板生成的数据而已。而数据模板里面包含两个部分,变量和函数。但是变量和函数是有区别的,变量是对象私有的,换句话说每一个对象的属性都是自己独享的,但是函数应该是所有对象所共享的。那么按照这个思想,我们能否通过函数来实现一个伪类型呢?比如:我要定义一个学生类,具

2021-09-17 19:18:26 238

原创 JavaScript中的上下文环境

1、什么是上下文上下文(Context)是程序运行的环境,在上下文中存储了一段程序运行时所需要的全部数据。在面向对象的编程语言中,上下文通常是一个对象,所以也被称为上下文对象。在之前的课程中我们讲到过,程序中的变量存储在栈区,准确的说变量存储在了上下文对象中,而上下文对象保存在了栈中。开始执行一段程序时,它的上下文对象就会被创建,并被推入栈中(入栈);程序执行完成时,它的上下文对象就会被销毁,并从栈顶被推出(出栈)。栈结构是一种先进先出的数据存储结构,通过栈这种特殊的数据结构可以确保程序中的变量在被

2021-09-17 19:14:20 1251

原创 GIT从入门到入土(IDEA集成)

一、源起代码,对于软件公司而言是最为宝贵的资产。如何保管代码才是是最高效的呢?假设我们不使用任何工具,各自为政,那么将会至少存在以下几个问题:团队成员因为硬盘损坏或者离职等原因导致代码丢失,则该成员的代码丢失团队成员无法得到其他成员的代码。需要定期花时间将自己的代码与其他成员合并(两两合并),以便于得到完整的代码,项目一旦复杂,这个工作量极大如果项目开发过程中,发觉编码思路出错,需要将代码回退到三天前的状态,则需要全部重写项目上线后,发觉存在一个低级bug,需要确认这个bug谁写的(然后…)

2021-07-26 18:02:19 563 4

原创 JavaScript接入百度地图API

一、百度地图API接入1、搜索百度地图开发平台2、注册百度账号3、登陆并申请成为开发者4、在百度地图开发平台的首页选择控制台,在控制台中创建应用创建好应用以后就能在控制台我的应用中看到这个应用,其中最重要的是AK,这是百度地图分配给我们应用的一个专用的秘钥,必须使用秘钥才能访问百度地图API。二、在HTML中使用百度地图API1、在html中引入百度地图js文件<script type="text/javascript" src="http://api.map.baidu.com/

2021-07-04 23:42:21 1184 7

原创 Hibernate使用教程(三)

Hibernate查询一、SQL查询SQLQuery是Hibernate提供的SQL查询对象(5.2以前)NativeQuery是Hibernate提供的SQL查询对象,通过sql语句执行查询,可查询一个集合或者一个对象。(5.2以后)使用过程:创建NativeQuery 对象:NativeQuery query=session.createNativeQuery(sql,Class c);第一个参数sql:表示本次查询执行的sql语句第二个参数Class:表示本次执行查询结果封装的实体类对

2021-06-22 23:01:59 705

原创 Shiro认证和授权(下)Shiro+JWT在前后端分离项目中实现认证授权

传统Session认证的弊端在上节课中我们使用的Shiro进行用户认证,内部通过是Session识别Subject,服务器识别依赖JSESSIONID的Cookie。但是在前后端分离的项目中,前端项目会单独运行挂载另外一个服务器中和后端项目的服务器不同。前端向后端发送请求时是跨域的无法携带JSESSIONID的Cokie的,就会导致每一个请求都是一个新的Session。问题的根源在传统的会话跟踪技术(Session+Cookie)存在弊端:1.跨域问题2.集群问题那么必须找一个新的技术来实现会话跟踪

2021-05-17 09:43:50 522 1

原创 Shiro认证和授权(上)基于Session的认证和授权

一、ShiroShiro是堡垒的意思,是一个身份认证和权限校验框架。通常来说在管理系统中权限是必不可少的一部分。公司所有的人都在同一个系统上进行操作,但是并不是所有的人都具备相同的权利。那么就需要在系统中将每个人所拥有的的权限明确的标识出来并同时在后端进行校验。权限系统按照颗粒粒度分为:按钮级别权限(决定某个用户能做什么不能做什么)数据级别权限(决定用户在能做这件事的前提下,能对哪些数据做这件事)要实现权限系统分为两个步骤:1.所见即所得我们需要在系统的界面层面,将用户所具备的菜单和按钮给用户

2021-05-06 11:59:39 674

原创 Spring+SpringMVC+Mybatis开发

一、SpringMVC框架相关1.1 SpringMVC的核心组件SpringMVC的核心组件:1、前端控制器DispatcherServlet​ 作用:接受请求,响应结果,相当于转发器,该组件可以降低耦合度2、处理器映射器HandlerMapping​ 作用:根据请求的URL查找Handler3、处理器适配器HandlerAdapter​ 作用:按照特定的规则去执行Handler4、处理器Handler​ 作用:按照要求编写Handler5、视图解析器View Resolver​

2021-03-26 17:49:09 413

原创 基于注入式木马病毒(浏览器绑架)实现及防御方法的研究

基于注入式木马病毒(浏览器绑架)实现及防御方法的研究申明:​ 本文章重在对技术的研究和讨论,为学开发的同学提供一种实现思路,为学习测试的同学提供一个软件安全测试的方向。如有读者通过本文进行一些个人篡改,及进行非法途径操作等,与蜗牛学院以及作者无关。前言:​ 在蜗牛学院学习的同学都知道,每天讲师授课之后都会将当天的授课视频上传到我们的在线课堂(www.woniuxy.com),学生只要登录进去就可以回看之前老师讲课的视频,从而进行复习。随着来我们蜗牛学院学习的同学越来越多,但很多刚入校的同学对电脑操作

2021-03-16 16:54:49 3719 11

原创 Seata分布式事务实践(纯干货附完整代码)

文章目录一 分布式事务解决方案1.1 XA协议1.2 两阶段提交(2PC)与三阶段提交(3PC)1.3 TCC补偿机制1.4 MQ异步确保型策略1.5 最大努力通知型1.6 各种方案选型二 Seata基础2.1 什么是Seata2.2 Seata的工作原理三 Seata安装3.1 Seata的下载3.2 Seata的配置3.3 数据库建表3.4 启动服务四 Seata的AT模式4.1 AT模式的原理4.2 AT模式应用一 分布式事务解决方案1.1 XA协议常见的分布式解决方案如下:两阶段提交型三

2021-03-15 09:57:40 2012 7

原创 微服务项目到底如何分模块

企业级项目结构封装释义如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块,分布式这类的概念,那么多半你会傻眼了。为什么一个项目会有这么多个子项目,这个项目里为何没有版本,这个parent是指向啥?今天我们模拟真实企业场景,来让大家掌握一些项目架构方面的知识。前提假设我们是同一家公司woniu科技,这家公司有5个开发小组,其中3个小组负责开发运营电影票务网站,另外2个小组开发运营外卖网站。思考那么从技术管理的角度,几个项目组之间需要有哪些层面上的相

2021-02-26 10:07:36 3772 5

原创 认真的解释JDK8函数式编程

我是认真的在解释JDK8函数式编程本文不讲解JDK8函数式编程的具体API,而是解释函数式编程的概念。但是弄懂原理是学习API的前提,纲举目张才能事半功倍。众所周知,JDK8引入了函数式编程。什么是函数式编程呢?为何需要函数式编程呢?认知决定高度。首先函数式编程是与面向对象编程一个层级的概念。任何Java程序员都不可能不知道面向对象编程OOP。OOP的口号是“万物皆对象”。什么是对象呢?就是现实中一个东西在编程领域的投射。对象有属性,有方法。属性表示数据,方法表示行为。对象可以用来表示任何事物,非常

2021-02-26 09:46:24 590

原创 Hibernate5.0使用教程(二)

Session对象Session对象是Hibernate中的重要对象,它表示了Hibernate与数据库的会话,是对JDBC Connection的封装,通过该对象我们可以执行增、删、改以及查询单个对象的功能。Session缓存:一级缓存在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存。 只要 Session 实例没有结束生命周期, 且没有清理缓存,则存放在它缓存中的对象也不会结束生命周期,位于缓存中的对象称为持久化对象, 它和数据库中的

2021-02-04 10:36:50 429 1

原创 Hibernate5.0使用教程(一)

一、Hibernate简介ORM:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维

2021-02-04 10:24:36 742

原创 分库分表中间件-Mycat

MyCat笔记一、MyCat简介Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有存储引擎,所以并不是完全意义的分布式数据库系统。mycat只能作为一个数据库中间件,用于在数据库集群中实现分表、读写分离、主从复制。以下通过两张图简单的介绍一下mycat的工作方式。在以往的应用中,应用程序直接与数据库进行连接,将命令发送给数据库,由数据库进行处理并响应结果。如果使用mycat作为数据库中间件,在mycat中可以进行主从、分表等等的配置,那么应用程序将不再

2021-01-19 17:49:57 437

原创 Redis持久化机制详解

redis的两种持久化方式对比​ redis支持两种持久化方式:数据快照:以数据快照的形式将数据状态进行保存,存储结构简单,关注的是数据本身;日志文件:以日志文件的形式将数据操作过程进行保存,存储结构复杂,关注数据操作过程;​ redis支持以上两种持久化方式:数据快照(RDB)、日志文件(AOF)。RDB​ redis的RDB方式持久化有三种方式:save指令、bgsave指令、通过配置自动持久化。RDB方式的相关配置vim redis-6380.confport 6380

2020-12-28 10:07:36 274

原创 使用Nexus搭建Maven私服

搭建maven私服nexus的安装及配置​ 使用nexus工具来搭建maven私服。nexus有两个大版本:2.*,3.*。​ 下载nexus:https://www.sonatype.com/download-nexus-repo-oss,下载时请选择OSS版本(免费)。​ nexus的安装:​ nexus是一个压缩版的软件,解压即可使用,解压目录中不能有中文和空格。​ 环境变量的配置:​ 在用户变量的path中添加:nexus的解压目录\nexus-3.9.0-01-win64

2020-12-28 10:06:27 791

原创 MySQL索引-索引优化详解

建表以及插入数据CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),age INT,address VARCHAR(20),idcard VARCHAR(20));INSERT INTO student VALUES (NULL,‘小红’,18,‘重庆’,‘a234’);INSERT INTO student VALUES (NULL,‘雷神’,28,‘北京’,‘fd332’);INSERT IN

2020-12-07 00:46:45 324

原创 SpringBoot-图文教程-自定义SpringBootStarter

相关配置和注解@Configuration 标记该类为一个配置类@ConditionalOnXxx 指定条件成立后该配置类才会生效@EnableConfigurationProperties(XxxProperties.class)//把属性类放入IOC@Bean 给容器添加组件@ConfigurationProperties(prefix = “前缀”) 绑定配置类路径下:META-INF/spring.factories 加载自动配置类规则:springboot把场景启动器

2020-12-07 00:40:48 415

原创 JAVA虚拟机-变量存储

简谈变量存储程序运行时,一般会有寄存器、栈、堆、静态区、常量池这几部分保存数据。1.寄存器:处理器内部,保存速度快,不由我们控制。2.栈:存放对象的引用,并不存放对象,对象存放于堆中,这些栈中对象的引用记录了对象在堆中的首地址。3.堆:存放对象,一般为使用new产生的数据。4.方法区:存放对象中由static定义的静态成员。5.常量池:存放常量值。内存分配:在方法中定义的一些基本类型的变量数据和对象的引用变量都随方法进栈执行而在栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为

2020-11-30 15:26:44 433

原创 JAVA-反射的应用

一、重要性:在Java语言里之所以会有如此众多的开源技术支撑,很大的一部分来自于java最大的特征——反射机制,项目开发与设计不能灵活的使用反射机制,则并未接触到java的精髓。后期自定义开发框架二、所有的技术实现的目标——重用性三、“反”与“正”当我们使用一个类的时候,一定先导入程序所在的包,而后根据类进行对象的时候,并且依靠对象调用类中的方法。“反”根据实例化对象反推出其类型。四、范例:正:import java.util.Date;//1、导入程序所在的包,类,知道对象的出处Date d

2020-11-30 15:17:39 155

原创 什么是敏捷测试工程师?

随着软件行业敏捷开发的越来越普遍,敏捷的测试工程师要求也越来越多,首先我们先来区分敏捷测试和普通测试的区别:1.项目相当于开发与测试并行;项目整体时间较快2.模块提交较快,测试时比较有压迫感3.工作任务划分清晰,工作效率较高4.项目规划要合理,否则测试时会出现复测得现象5.发现问题需跟紧,项目中人员都比较忙,问题很容易被遗忘6.耗时或者较难解决对项目影响不大的问题7.发现Bug能够很快的解决,对相关的模块的测试影响较小8.版本更换比较勤,影响到测试的速度9.要多与开发沟通10.要注意版本

2020-11-15 20:17:55 532

原创 虚拟机中安装Linux-CentOS7图文教程

首先附上centos的下载地址:https://www.centos.org/download/现在centos最新的系统已经更新到centos8了,根据自己的需求去网址上下载,这里我们简单介绍常见的centos7系统:CentOS-7.0-x86_64-DVD-1503-01.iso : 标准安装版,一般下载这个就可以了(推荐)CentOS-7.0-x86_64-NetInstall-1503-01.iso : 网络安装镜像(从网络安装或者救援系统)CentOS-7.0-x86_64-Everyt

2020-11-15 20:06:13 184

原创 前端中ajax的运用

原生js实现ajax的get请求使用原生js完成ajax的get请求步骤如下:步骤1:创建ajax对象步骤2:调用open方法步骤3:调用send方法发送请求步骤4:注册事件原生js完成ajax的post请求<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style

2020-11-02 00:15:07 255

原创 java-Oracle JDK 和 OpenJDK 的对比

可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle 和 OpenJDK之间是否存在重大差异?下面通过我通过我收集到一些资 料对你解答这个被很多人忽视的问题。对于 Java 7,没什么关键的地方。OpenJDK 项目主要基于 Sun 捐赠的 HotSpot源代码。此外,OpenJDK 被选为 Java 7 的参考实现,由 Oracle 工程师维护。关于 JVM,JDK,JRE 和 OpenJDK 之间的区别,Oracle 博客帖子在 2012 年有一个更详细的答.

2020-10-19 19:35:59 948

原创 java-悲观锁与乐观锁

何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能说一种人好于另外一种人,这个要视场景而定。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁

2020-10-19 12:25:00 150

原创 M-S分布式压测配置

应用场景:在实际测试中,有时我们的服务器能够抗住很高的并发,而我们的单台负载机只能产生很小的压力,也就是说单台负载机能够产生的压力远远达不到服务器能够抗压的极限,举个栗子:假设咱们的服务器能够抗住3000的并发,而我们自己产生压力的电脑也就是负载机最多只能产生1000的并发,此时如何模拟3000的并发来测试服务器是否能够抗住3000的压力?解决方案:使用Jmeter 的M-S 分布式压测M-S 分布式压测的原理:M-S分布式压测主要分为3部分,第一部分是调度操控全局的主节点,第二部分是负责接受操控并

2020-09-26 22:15:01 261

原创 Linux下监控服务器的资源利用率

在性能测试中,我们总会遇到监控服务器资源利用率的情况,下面给大家演示下使用命令来监控Linux 下的各项资源使用情况:1.CPU监控:以下两个指标只要有一个满了就说明CPU不够了CPU 利用率:强调的是在统计时间段内CPU 被利用了多长时间us:用户进程消耗的CPU 百分比 <=50%-60%sy:系统进程消耗的CPU百分比 <=10%-30%id:空闲进程消耗的CPU百分比wa:处于等待状态的进程消耗的CPU百分比CPU 队列长度:强调的是有多少进程或线程等着在用CP

2020-09-26 22:12:16 576

原创 极域电子教室常见问题解决方案

极域常见问题1、怎么把极域卸载干净在使用过程中经常有极域出现问题,需要卸载重新安装的情况。下面的步骤适用于:1、极域卸载密码忘记,无法卸载2、极域卸载了,无法重新安装1.1、在任务管理器里面结束与极域相关的进程1.2、删除极域安装目录默认路径:C:\Program Files (x86)\Mythware将整个Mythware文件夹删除。然后再看看“我的文档”里面有没有,有也删除。删除后清空垃圾桶。1.3、清除注册表里的topdomain、mythware在运行中输入 “rege

2020-09-26 22:08:52 29569 14

原创 SpringCloud整合Quartz

一、Quartz简介Quartz是一个完全由java编写的开源作业调度框架,隶属于OpenSymphony开源组织。Quartz广泛的应用于定时作业业务场景中。Quartz中的重要组件:任务(job):用于编写定时作业完成的具体任务,所得通俗一点,该组件中的方法会在某个具体的时间点执行,该方法中需要我们自己编写工作逻辑。触发器(Trigger):任务触发器,用于定义任务的具体执行时机。调度器(Scheduler):核心组件,用于管理和调度所有的任务。监听器(Listener):监听器,用于动态的

2020-09-14 01:12:04 3929 1

原创 pythod-使用多线程实现简单web服务器

本文将使用python语言实现一个web服务器,通过本文你可以了解到web服务器的简单工作原理import socket,reimport threadingdef service_client(con): #1. 接受浏览器发送过来的 http 请求 GET / HTTP1.1 request = con.recv(1024).decode("utf8") # 2. 提取字符串中的路径 文件名 request_lines = request.splitlines()

2020-09-06 20:06:06 216

原创 Python-图片验证码识别

注意: 需要在云打码平台注册并且充值import jsonimport requestsimport base64from io import BytesIOfrom PIL import Imagefrom sys import version_infodef base64_api(uname, pwd, img): img = img.convert('L') # 二值化处理 buffered = BytesIO() img.save(buffered, fo

2020-09-06 20:02:09 259

原创 JAVA-比较器的使用

Java中的比较器引用对象如果需要排序,必须指定排序标准,排序 标准就是使用java的比较器实现。 排序的算法实现,已经被封装,我们无需关心,只需给对象排序条件。例如:按照销量排,评论数,价格 等排序条件java中比较器两种:自然排序:java.lang.comparable接口定制排序:java.util.Comparator接口package com.woniu.chapter16_06; import java.util.Arrays;public class Test { p

2020-08-30 22:42:07 335

原创 JAVA-枚举的使用

枚举使用场景: 当使用的对象个数是确定的时候,而且对象个数较少。就可是使用枚举。枚举的使用方式就是一种数据类型,只是这种类型的值是固定的个数数据类型 变量 = 值int i = 10;枚举类型 变量 = 枚举值理解: int是java给定的数据类型,枚举是自定义的数据类型, 类似于自定义的类数据类型(自定义) 变量 = 值(new)Person p = new Person();java1.5之前使用自定义枚举类:自定义一个类(充当枚举类)类的对象个数确定,数量较少package

2020-08-30 22:37:34 129

原创 正交实验法的使用

前面一篇我们讲了测试用例的定义,重要性以及相关基础知识点.那么我们怎么去撰写测试用例呢?怎么去实现撰写达到评价标准的测试用例呢?是凭空想象?是想到哪里写到哪里?不不,这么专业的事情,我们有专业的方法去实现,针对撰写测试用例,我们有专业的测试用例设计方法.说起测试用例 设计方法,我们最常见的是等价类、边界值.那我们今天就给大家讲,测试用例设计方法之:正交实验法.哈哈哈哈,是不是很惊喜,很意外.那么接下来我们就来讲讲这个正交实验法.什么是正交实验法呢?正交实验法是研究多因素多水平的一种设计方法,它根据

2020-08-23 23:39:02 1510

原创 测试用例浅析

经常会有人觉得测试是个很简单的工作,因为他们都认为测试就是点点点,如果你也这么认为,我只能说Too Young Too Simple。测试这个工作真的要想做好,还是需要一定的专业知识支撑和一定的经验的积累。那么我们今天就来谈谈最简单最直接的测试用例的相关知识。本节知识只是概念性的总结,了解了这些基本概念有助于理解和学习后续的知识点。首先,什么是测试用例呢?定义:是一组测试输入、执行条件和预期结果的集合,目的是满足一个特定的目标,比如:执行一条特定的程序路径或检验是否符合一个特定的需求:可以用一个公

2020-08-23 23:31:29 304 1

原创 Java-ArrayList深度解析

Java集合框架----ArrayList之前我们学过数组了,已经知道数组有个缺点,数组一旦被创建,不能自行扩容。现在介绍ArrayList集合容器,它是对数组进行了封装,使其可以动态扩容和缩小长度,并且ArrayList还可以存储任意类型的数据。因此ArrayList底层实现的数据结构就是数组。一、ArrayList集合容器中实现的接口和继承的类1)先继承AbstractList父类,自己本身也实现List接口。继承和重写父类和接口中的方法。2)实现RandomAccess接口:这是有关效率

2020-08-15 09:58:12 310 1

原创 JAVA-LinkedList的源码分析

LinkedList的源码分析LinkedList的数据结是双向链表,因为是链表结构,所以LinkedList更加适用于增删频繁而查询修改不频繁的场景,其适用场景和ArrayList有一些相反的。LinkedList的结构图示:从结构图中,可以看的出来以下信息:1、实现了List接口:可以使用List接口中的所有方法。2、实现了Cloneable接口,因此LinkedList支持克隆,但是只支持浅克隆,在LinkedList类中,其中的内部类Node并没有被克隆,只是调用了Object类中的

2020-08-15 09:55:04 171

原创 JAVA-异常的三大处理原则

1.程序层面异常处理原则要避免使用异常处理代替错误处理;有的人写代码会用异常处理来做判断逻辑或者做业务逻辑处理,这样会降低程序的 清晰性,并且效率低下。处理异常不可以代替简单测试,只能在异常情况下使用异常机制;不要进行小粒度的异常处理,应该将整个业务代码包装在一个 try 语句块中异常往往在高层处理,且不能忽视每一个异常2.需求层面异常处理原则搞清楚业务边界,用代码防止异常;在写代码之前,就要明确业务需求,同时了解该需求功能的边界,写代码的时候,用专门的代码来防止异常的发生。给用户.

2020-08-08 16:44:14 1852

空空如也

空空如也

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

TA关注的人

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