(5)栈变队列和栈的压入、弹出序列
一 用两个栈实现队列题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
问题分析:先来回顾一下栈和队列的基本特点:栈:后进先出(LIFO)队列: 先进先出很明显我们需要根据JDK给我们提供的栈的一些基本方法来实现。先来看一下Stack类的一些基本方法:
既然题目给了我们两个栈,我们可以这样考虑当push的时候将元素push进stack1,pop的时候我们先把stack1的元素pop到stack2,然后再对stack2执行pop操作,这样就可以保证是先进先出的。(负[pop]负[pop]得正[先进先出])
考察内容:队列+栈
示例代码://左程云的《程序员代码面试指南》的答案import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); //当执行 ...
11-Vue组件的定义和注册
前言什么是组件组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可。
模块化和组件化的区别
模块化:是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一
组件化:是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用
全局组件的定义和注册组件Component是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。
全局组件的定义和注册有三种方式,我们接下来讲一讲。
写法一写法一:使用Vue.extend方法定义组件,使用 Vue.component方法注册组件。
代码举例:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-widt ...
12-Vue组件之间的传值
父组件向子组件传值我们可以这样理解:Vue实例就是一个父组件,而我们自定义的组件(包括全局组件、私有组件)就是子组件。
【重点】需要注意的是,子组件不能直接使用父组件中的数据。父组件可以通过props属性向子组件传值。
父组件向子组件传值的代码举例<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="vue2.5.16.js"> ...
13-Vue-router路由
什么是路由后端路由对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源。
当前端输入url请求资源时,服务器会监听到是什么url地址,那后端会返回什么样的资源呢?后端这个处理的过程就是通过路由来分发的。
总结:后端路由,就是把所有url地址都对应到服务器的资源,这个对应关系就是路由。
前端路由对于单页面应用程序来说,主要通过URL中的hash(url地址中的#号)来实现不同页面之间的切换。
同时,hash有一个特点:HTTP请求中不会包含hash相关的内容。所以,单页面程序中的页面跳转主要用hash实现。
总结:在单页应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由)。
安装Vue-router的两种方式
官方文档:https://router.vuejs.org/zh/
方式一:直接下载文件
下载网址:https://unpkg.com/vue-router/dist/vue-router.js
下载之后,放进项目工程,然后我们在引入vue.js之后,再引入vue-router.js即可:
<script src= ...
Vue Router 手把手教你搭 Vue3 路由
Vue Router 手把手教你搭 Vue3 路由Vue 的单页面应用是基于路由+组件的形式,路由用于设定访问路径,并将路径与组件映射起来。这种形式相对于 a标签超链来说不会重新加载页面,而是在同一个页面中进行路由跳转。
本教程在 Vue3 中手把手教你搭建 Router ,并详细讲解其中的路由原理以及当用户输入错误时,如何路由到 404 页面等方法。请打开你的 Terminal 跟随本教程一起学习。
如果你正在搭建后台管理工具,又不想处理前端问题,推荐使用卡拉云,卡拉云是新一代低代码开发工具,可一键接入常见数据库及 API ,无需懂前端,仅需拖拽即可快速搭建属于你自己的后台管理工具,一周工作量缩减至一天,详见本文文末。
从安装 Vue3 开始我们先来安装 Vue3 ,一步一步来:
npm install -g @vue/cli
然后我们将创建我们的基本 Vue 3 应用程序。
vue create kalacloud-vue-router
选择 Vue 3 ,然后会自动帮你创建基于 Vue 3 的项目。
完成后,我们 cd 到项目目录,接下来我们本教程所有操作都在这个目录下完成 ...
Vue-router路由
前言路由:就是SPA(单页应用)的路径管理器。
Vue.js在开发中的常见写法积累
001、对象的赋值(1)在 store 中定义一个对象:
userInfo: { pin: '', nickName: '', avatarUrl: DEFAULT_AVATAR, definePin: '', isbind: true},
(2)从接口拿到数据后,给这个对象赋值:
this.userInfo = { ...this.userInfo, pin: res.base.curPin, nickName: res.base.nickname, avatarUrl: res.base.headImageUrl ? res.base.headImageUrl : DEFAULT_AVATAR, definePin: res.definePin}
Vue开发积累
动态添加对象的属性
Vue中,动态新增对象的属性时,不能直接添加。正确的做法是:Vue.set(obj,key,value)。参考链接:#
判断一个checkbox是否被选中<!-- v-model里的内容是变量,变量里的值可能是 true 后者 false --><input type="checkbox" v-model="isSelected"><!-- 选中时,值为 true。未选中时,值为 false --><span>{{isSelected}}</span><!-- 选中时,显示文字。未选中时,隐藏文字 --><span v-if="isSelected">haha</span>
多个checkbox的全选和反选现在有多个checkbox的item在一个数组中,另外还有一个“全选”的checkbox按钮。
点击全选按钮,让子item全部选中:
采用 watch 监听全选按 ...
Vue组件
子组件的定义和注册我们在本文的第一段中,通过Vue.component形式定义的是全局组件。这一段中,我们来讲一下子组件。
在父组件中定义子组件比如说,一个账号模块是父组件,里面分为登陆模块和注册模块,这两个晓得模块就可以定义为子组件。
需要注意的是作用域的问题:我们在父组件中定义的子组件,只能在当前父组件的模板中使用;在其他的组件,甚至根组件中,都无法使用。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document< ...
vue-ui-components 相关整理
vue 相关整理vue UI组件
组件名称
地址
描述
vue-datetime
https://github.com/mariomka/vue-datetime
📅 移动端日期+时间选择组件,支持国际化和禁用日期
vue-datepicker
https://github.com/hilongjw/vue-datepicker
📅 移动端日历和时间选择组件
vue-amap
https://github.com/ElemeFE/vue-amap
🌍 基于 Vue 2.x 和高德地图的地图组件
Markcook
https://github.com/jrainlau/markcook
🍸 好看的markdown编辑器
vue3.0详解setup中如何使用data,method,watch,computed,生命周期,教你快速上手-02 - 简书
vue3.0详解setup中如何使用data,method,watch,computed,生命周期,教你快速上手-02setup如何使用?对比vue2.0的使用方式,你需要把data, method, computed, watch以及生命周期都放到setup函数中来使用
1、setup中的data如何使用?import { ref, toRefs, reactive } from 'vue'export default { name: 'Test', setup(){ // 在setup中定义template模板使用的响应式变量,你得用ref或者reactive来定义 // 这里的ref你可以理解成一个工厂类,传入的参数就是初始化的变量的值,跟组件的ref概念不能混淆 // 定义单个变量,为了让大家明白意义,我跟vue2.0都进行下对比 // vue2.0,不管定义单个或者多个我们都是定义 在data里,如 /* data(){ ...
Leetcode-链表相关LinkList
1. 两数相加题目描述
Leetcode:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807
问题分析Leetcode官方详细解答地址:
https://leetcode-cn.com/problems/add-two-numbers/solution/
要对头结点进行操作时,考虑创建哑节点dummy,使用dummy->next表示真正的头节点。这样可以避免处理头节点为空的边界问题。
我们使用变量来跟踪进位,并从包含最低有效位的表头开始模拟逐位相加的过程。
Solution我们首先从最低有效位也就是列表 l1和 l2 的表头开始相加。注意需要考虑到进位的情况!
/** * Definition for singly-linked list. * public class Li ...
第一周(2018-8-7)
一 为什么 Java 中只有值传递?首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。 它用来描述各种程序设计语言(不只是Java)中方法参数传递方式。
Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。
下面通过 3 个例子来给大家说明
example 1public static void main(String[] args) { int num1 = 10; int num2 = 20; swap(num1, num2); System.out.println("num1 = " + num1); System.out.println("num2 = " + n ...
第二周(2018-8-13)
String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?String和StringBuffer、StringBuilder的区别可变性
简单的来说:String 类中使用 final 关键字字符数组保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是 AbstractStringBuilder 实现的,大家可以自行查阅源码。
AbstractStringBuilder.java
abstract class AbstractStringBuilder implements Appendable, CharSeq ...
第四周(2018-8-30)
1. 简述线程,程序、进程的基本概念。以及他们之间关系是什么?线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。
线程 是 进程 划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一 ...