Git:
Basic Commands
1 git init ------ 初始化本地git仓库
2 git add ------ 添加文件
3 git status ------ 查看状态
4 git commit ------ 提交
5 git push ------ 推送到仓库
6 git pull ------ 从远程仓库拉取数据
7 git clone ------ 从远程仓库拷贝数据

具体操作:
第一步------创建文件夹并进入
第二步------git --version
第三步------在该文件夹中创建文件 index.html
第四步------git init (设置本地仓库)
第五步------git config --global user.name ‘WangHe’
第六步------git config --global user.email ‘13652175995@163.com’
第七步------git add index.html
第八步------git status
第九步------git add *.html
第十步------git rm -cached index.html
第十一步----git add .
第十二步----git commit
第十三步----git commit -m “change add.js” (linux用单引号)

Vue:
1 初始化Vue对象------ new Vue({
el:"#vue-app",
data:{
name:“米斯特王”
}
});


{{name}}


2 添加方法------ new Vue({
el:"#vue-app",
data:{
name:“米斯特王”
},
methods:{
greet:function (time) {
return "good "+time+“Morning”+this.name
}
}
});


{{greet(“afternoon”)}}


3 绑定属性(v-bind,v-html)------  website:"http://www.baidu.com",websiteTeg:"<a href='http://www.tmooc.cn'>达内学生系统</a>"<div id="vue-app"><a v-bind:href="website">百度一下,你就不知道</a><input type="text" v-bind:value="name"><p v-html="websiteTeg"></p></div>4 绑定事件------new Vue({el:"#app-div",data:{age:0,x:0,y:0},methods:{add:function (a) {console.log(a)this.age = this.age+a;},sub:function (b) {this.age = this.age-b;},getXY:function (event) {this.x = event.screenX;this.y = event.screenY;}}})<div id="app-div"><h1>{{age}}</h1><button v-on:click="add(1)">加一岁</button><button v-on:click="sub(1)">减一岁</button><button v-on:dblclick="add(10)">加十岁</button><button v-on:dblclick="sub(10)">减十岁</button><div id="xycss" v-on:mousemove="getXY">{{x}},{{y}}</div></div>5.事件修饰符 1 <button v-on:click.once="add(1)">加一岁</button>----once 让鼠标只能单击一次2 <a v-on:click.prevent="alert" href="http://www.taobao.com">淘一下</a>----prevent 让超链接不跳转对应网址3 <span v-on:mousemove.stop="">stop move</span>----stop 让鼠标移动事件在指定位置失效4 event.stopPropagation()----该方法也是让鼠标移动事件在指定位置失效(需要在js中定义方法调用)6.键盘事件及键值修饰符1 <input type="text" v-on:keyup="inputName"/>----输入就调方法2 <input type="text" v-on:keyup.enter="inputName"/>----输入后,按enter调方法3 <input type="text" v-on:keyup.alt.enter="inputAge"/>---输入后,按alt+enter调方法
7.双向事件绑定data:{name:"",age:""}1 <input ref="inputName" type="text" v-on:keyup="inputName"/>---- ref="inputName" 设置ref属性inputName:function () {this.name =this.$refs.inputName.value;}2 <input ref="inputAge" type="text" v-model="age"/>---- v-model属性,用于将变量赋值给变量
8.计算属性1 普通属性(缺点会调用所有方法)methods:{aAddAge:function () {console.log("a add age");return this.a+this.age;},bAddAge:function () {console.log("b add age");return this.b+this.age;}<div id="app-div"><h1>普通属性</h1><button v-on:click="a++">add to a</button><button v-on:click="b++">add to b</button><p>A - {{a}}</p><p>B - {{b}}</p><br/><br/><br/><span>{{aAddAge()}}</span>&nbsp;&nbsp;&nbsp;<span>{{bAddAge()}}</span></div>2 计算属性:(优点只调用当前方法)computed:{/*同上*/}<span>{{aAddAge}}</span>&nbsp;&nbsp;&nbsp;------aAddAge和bAddAge去掉后面小括号<span>{{bAddAge}}</span>9.动态绑定Css样式.aaa{width:50px;height:50px;background-color:red;}span{background-color:green;}.bbb{margin-left:50px;}new Vue({el:"#app-div",data:{aaa:false,bbb:false},computed:{compClasses:function () {return {aaa:this.aaa,bbb:this.bbb}}}})<div id="app-div"><h1>动态绑定css样式1</h1><div v-on:click="aaa=!aaa">变色<!--<span v-bind:class="{aaa:aaa}">aaa</span>--></div><h2>动态绑定css样式2</h2><button v-on:click="aaa=!aaa">变色</button><button v-on:click="bbb=!bbb">移动</button><span v-bind:class="compClasses">aaa</span></div>
10.v-if的使用(v-show和v-if的区别是v-show仅仅是隐藏不显示的标签)<button v-on:click="error=!error">404</button><button v-on:click="scusess=!scusess">200</button><!--<p v-if="error">页面不存在</p>--><!--<p v-else-if="scusess">成功进入页面</p>--><p v-show="error">页面不存在</p><p v-show="scusess">成功进入页面</p>
11.v-for的使用data:{characters:["zs","ls","ww"],users:[{"name":"迪丽热巴","age":10},{"name":"古力娜扎","age":20},{"name":"欧阳娜娜","age":30}]}<h1>v-for的使用</h1><ul  v-for="character in characters"><li>{{character}}</li></ul><div v-for="user in users">{{user.name}}-{{user.age}}</div><div v-for="(user,index) in users"><h1>{{index+1}}.{{user.name}}-{{user.age}}</h1></div><template v-for="(user,index) in users"><h1>{{index+1}}.{{user.name}}-{{user.age}}</h1></template><template v-for="(user,index) in users" key="index"> --- (若不写key值报错,则采用这种方式即可)<div v-for="(val,key) in user"><h2>{{index+1}}.{{key}}->{{val}}</h2></div></template>12.实例化多个vue对象one = new Vue({el:"#vue-app",data:{name:"第一个vue对象"},methods:{},computed:{greet:function () {return "大家好,我是第一个Vue,请多关照呦!"}}}),two = new Vue({el:"#vue-app2",data:{name:"第二个vue对象"},methods:{renameOne:function () {one.name="我改名为古力娜扎"}},computed:{greet:function(){return"大家好,我是第二个Vue,请多关照呦!"}}})<div id="vue-app"><h1>{{name}}</h1><p>{{greet}}</p></div><div id="vue-app2"><h1>{{name}}</h1><p>{{greet}}</p><button v-on:click="renameOne">改名</button></div>13.初识组件的应用(公共部分可用组件抽取)Vue.component("greeting",{template:'<p>{{name}}:大家好这是我女朋友@关晓彤' +'<button v-on:click="rename">改名</button></p>',data:function () {return {name:"鹿晗"}},methods:{rename:function () {this.name="吴亦凡"}}})new Vue({el:"#vue-app",}),new Vue({el:"#vue-app2",})<div id="vue-app"><greeting></greeting></div><div id="vue-app2"><greeting></greeting></div>14.vue搭建脚手架CLI第一步------node -v第二步------npm -v第三步------npm install --global vue-cli第四步------vue --version第五步------进入新建文件夹projects cd C:\Users\Administrator\Desktop\vue\projects第六步------vue init webpack vue-playlist第七步------no no no no 选择npm第八步------ 启动脚手架,端口8080  cd vue-playlistnpm run dev15.vue组件嵌套全局组件:main.js里添加 import Users from './components/users'   Vue.component("users",Users)app.vue里引入对应<users></users>标签局部组件(常用):App.vue里添加 import Users from './components/users'     components:{"users":Users}    <users></users>标签16.vue组件css作用域<style></style>------全局作用域<style scoped></style>------局部作用域17.Vue组件之间属性传值第一步------在组件的html里绑定自定义属性<app-users v-bind:users="users"></app-users>第二步------第一种  props:["users"]第二种  props:{users:{type:Array,required:true}}18.Vue传值和传引用1 传值:各个子组件之间不影响,如String boolean等2 传引用:各个子组件之间用的是一个对象,改变其中一个组件对象,其他组件也会改变,有两种:Array Object19.Vue事件传值(子向父组件传值)子组件:methods:{ ---点击事件方法titleChanged:function () {this.$emit("titleChanged","子向父传值")}}父组件:<app-header v-on:titleChanged="updateTitle($event)" v-bind:title="title"></app-header>methods:{updateTitle:function (title) {this.title=title}}20.Vue生命周期(钩子函数,和methods平级)beforeCreate:function () {alert("组件实例化之前执行的函数")},created:function () {alert("组件实例化完毕,但页面还未显示")},beforeMount:function () {alert("组件挂载前,页面仍未展示,但虚拟dom已经配置")},mounted:function () {alert("组件挂载后,此方法执行后,页面显示")},beforeUpdate:function() {alert("组件更新前,页面仍未更新,但虚拟dom已经配置")},updated:function () {alert("组件更新,此方法执行后,页面显示")},beforeDestroy:function() {alert("组件销毁前")},destroyed:function() {alert("组件销毁")}21.Vue路由和Http路由:第一步------安装路由模块 npm install vue-router --save-dev第二步------main.js中引入路由模块 import VueRouter from 'vue-router'第三步------用一下 Vue.use(VueRouter)第四步------配置路由 const router = new VueRouter({routes:[{path:"/",component:Home },{path:"/helloworld",component:HelloWorld }],mode:"history"})第五步------App.vue页面天加标签 <router-view></router-view>第六步------跳转页面(不能用a,那样会整个页面跳转) <li><router-link to="/">Home</router-link></li><li><router-link to="/helloworld">helloworld</router-link></li>Http:第一步------安装http模块 npm install vue-resource --save-dev第二步------main.js中引入http模块 import VueResource from 'vue-resource'第三步------用一下 Vue.use()第四步------调用接口获取数据即可 created:function () {this.$http.get("http://jsonplaceholder.typicode.com/users").then((data)=>{this.users = data.body});}

一(1) java
idea快捷键
(1) ctrl + alt +B 查看接口实现类
(2) alt+left/right 切换文件

Api方法
(1) String------length():获取字符串长度
charAt(int index):获取指定位置的字符
equals():判断两个字符串的内容是否相同,相同返回true
indexOf(String str):查找子串的起始位置下标,没有返回 -1
indexOf(String str, int start):从start 位置向后找
lastIndexOf(String str):从后向前找获取指定字符串的位置
substring(int begin):截取子串,指定开始位置一直到结束为止都会被截取到
substring(int begin,int end):截取子串,[begin, end) 指定开始位置和结束位置
(2) ArrayList------底层是用数组实现的存储,特点: 查询效率高,增删效率低,线程不安全
一(2) Java基础知识
(1) 台球小游戏:
----------------------------------------------------------------------------------------------------
import javax.swing.;
import java.awt.
;

			public class BallGame2 extends JFrame {Image ball = new ImageIcon(ClassLoader.getSystemResource("images/ball.png")).getImage();Image desk = new ImageIcon(ClassLoader.getSystemResource("images/desk.jpg")).getImage();double x = 100;//小球的横坐标double y = 100;//小球的纵坐标double degree = 3.14/3;//弧度(60度)boolean right = true;public void paint(Graphics g) {System.out.println("--------");g.drawImage(desk,0,0, null);g.drawImage(ball,(int)x,(int)y,this);x = x+10*Math.cos(degree);y = y+10*Math.sin(degree);if(y>500-40-30 || y<80){degree=-degree;}if( x>780 || x<50){degree=3.14-degree;}}void launchFrame(){setSize(856,500);setLocation(200,200);setVisible(true);while (true){repaint();try {Thread.sleep(40);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {BallGame2 ballGame = new BallGame2();ballGame.launchFrame();}}----------------------------------------------------------------------------------------------------(2) 飞机小游戏(略)(3) Thread1 静态代理模式public class StaticProxy {public static void main(String[] args) {new WeddingCompany(new You()).happyMarry();//参考 new Thread(new MyThread()).start;}}interface Marry {public void happyMarry();}class You implements Marry{@Overridepublic void happyMarry() {System.out.println("你和嫦娥结婚了");}}class WeddingCompany implements Marry {private Marry target;public WeddingCompany(Marry target) {this.target = target;}@Overridepublic void happyMarry() {System.out.println("布置婚房");target.happyMarry();System.out.println("闹洞房");}}2 join方法的使用public class JoinUse {public static void main(String[] args) {new Thread(new Father()).start();}}class Father extends Thread{@Overridepublic void run() {System.out.println("想抽中华烟,让儿子去买烟");Thread thread = new Thread(new Son());thread.start();try {thread.join();} catch (InterruptedException e) {e.printStackTrace();System.out.println("找儿子去了");}System.out.println("抽上了,把零钱给儿子了");}}class Son extends Thread{@Overridepublic void run() {System.out.println("儿子去了,路过游戏厅玩了10秒");for (int i=1;i<=10;i++){System.out.println("过了"+i+"秒");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("购买成功,带一包中华烟回家");}}

一() SpringBoot
springBoot分页+查询条件示例:
dao------@Query(value = “select * from tb_problem,tb_pl where id = problemid and labelid=? order by replytime desc “,nativeQuery = true)
public Page newList(String labelid, Pageable pageable);
service------ public Page findSearch(Map whereMap, int page, int size) {
Specification specification = createSpecification(whereMap);
PageRequest pageRequest = PageRequest.of(page-1, size);
return problemDao.findAll(specification, pageRequest);
}
查询条件------ private Specification createSpecification(Map searchMap) {
return new Specification() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List predicateList = new ArrayList();
// ID
if (searchMap.get(“id”)!=null && !””.equals(searchMap.get(“id”))) {
predicateList.add(cb.like(root.get(“id”).as(String.class), “%”+(String)searchMap.get(“id”)+"%"));
}
// 标题
if (searchMap.get(“title”)!=null && !"".equals(searchMap.get(“title”))) {
predicateList.add(cb.like(root.get(“title”).as(String.class), “%”+(String)searchMap.get(“title”)+"%"));
}
return cb.and( predicateList.toArray(new Predicate[predicateList.size()]));
}
};

				}
controller------ @RequestMapping(value = "/waitList/{labelid}/{page}/{size}",method = RequestMethod.GET)public Result waitList(@PathVariable String labelid,@PathVariable int page,@PathVariable int size){Page<Problem> pageData = problemService.waitList(labelid, page, size);return new Result(true,StatusCode.OK,"查询成功",new PageResult<Problem>(pageData.getTotalElements(),pageData.getContent()));}
Environment------可以获取配置文件中的所有信息
@Value("${aliyun.sms.template_code}")------获取配置文件中属性
private String template_code;//模板编号	

二 DOCKER命令

安装docker
步骤一:将以前下载好的Docker卸载干净, 使用如下命令:

yum remove docker-*
1
步骤二:更新该Liunx系统的内核版本,使用如下命令:

yum update
1
建议更新完之后, 重启一下系统
步骤三:继续下载安装docker(尽量使用高级管理员权限下载)使用如下命令

yum install dacker
1
步骤四:使用如下命令启动docker

systemctl start docker
1
问题解决!
如果这样安装完之后还报错, 按照这个步骤再来一遍即可

如果使用docker命令时出现如下错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
1
第一个原因可能是因为docker没有启动
第二个原因就是因为docker出现错误
归根结底都是docker启动问题, 解决方案还是以上步骤

安装docker 时候出现以下问题

yum -y install docker
Loaded plugins: fastestmirror
Determining fastest mirrors

  • base: centos.uhost.hk
  • extras: mirrors.btte.net
  • updates: mirror.bit.edu.cn
    base | 3.7 kB 00:00
    base/primary_db | 4.7 MB 00:47
    extras | 3.4 kB 00:00
    extras/primary_db | 29 kB 00:00
    updates | 3.4 kB 00:00
    updates/primary_db | 2.5 MB 00:20
    Setting up Install Process
    No package docker available.
    Error: Nothing to do

yum没有找到docker包,更新epel第三方软件库,运行命令:

sudo yum install epel-release

之后运行
sudo yum install docker-io
即可

安装文档 http://www.runoob.com/docker/centos-docker-install.html

启动docker------systemctl start docker
查找镜像------docker search mysql docker pull elasticsearch:5.6.8 等
安装镜像------docker pull mysql/mysql-server
制作容器(mysql)------docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7:版本
制作容器(redis)------docker run -di --name=tensquare_redis -p 6379:6379 redis
制作容器(mongo)------docker run -di --name=tensquare_mongo -p 27017:27017 mongo
制作容器(elasticsearch)------docker run di --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
查看正在运行的容器------docker ps
查看所有容器------docker ps -a
启动容器------docker start id号
删除容器------docker rm id号


三 缓存使用
第一步------
org.springframework.boot
spring-boot-starter-data-redis

第二步------ yml文件中加:spring:
redis:
host: 192.168.47.141
redisAPI------查询缓存:redisTemplate.opsForValue().get(String key);
添加缓存:redisTemplate.opsForValue().set(String key,Object value);
删除缓存:redisTemplate.delete(String key);
设置缓存时间:redisTemplate.opsForValue().set(“article_”+id,article,10, TimeUnit.SECONDS);
spring自带缓存使用方法------1.主启动类加@EnableCaching;
2.查询 @Cacheable(value = “gathering”,key = “#id”);
3.修改和删除 @CacheEvict(value = “gathering”,key = “#gathering.id”)
4.弊端,不能设置缓存时间


四(1) MongoDB(了解)------1.安装配环境变量,和mysql数据库一样
2.设置服务器存储路径 mongod -dbpath=d:\data (需要提前创建data文件夹)
3.启动客户端(默认localhost) mongo (非默认则mongo ip)
常用命令(了解,属于底层原理范畴):1.创建数据库: use spitdb
2.创建表并查看: db.spit.find()
3.插入数据: db.spit.insert({content:“最近有点冷”,visits:10})
4.查询id为1的数据: db.spit.find({_id:“1”})
5.查一条记录: db.spit.findOne({userid:‘1013’})
6.分页查询: db.spit.find().limit(3);
7.修改数据: db.spit.update({_id:“2”},{KaTeX parse error: Expected 'EOF', got '}' at position 29: …umberInt(2000)}}̲)简单查询API:…gt",1000));
//得到集合中所有文档
FindIterable documents = spit.find(bson);
添加数据API:
Map<String,Object> map = new HashMap<>();
map.put("_id",123);
map.put(“content”,“时间过的好快呀”);
map.put(“userid”,“1016”);
map.put(“visits”,100);
Document document = new Document(map);
spit.insertOne(document);

四(2) SpringDataMongoDB
依赖包------
org.springframework.boot
spring-boot-starter-data-mongodb

yml文件中加------spring:
data:
mongodb:
host: 192.168.47.141
database: spitdb
SpringDataMongoDB API------
public void thumbup(String spitId) {
//更新时每次查询数据库效率低
//Spit spit = spitDao.findById(spitId).get();
//spit.setThumbup((spit.getThumbup()==null?0:spit.getThumbup())+1);
//spitDao.save(spit);

						Query query = new Query();query.addCriteria(Criteria.where("_id").is("1"));Update update=new Update();update.inc("thumbup",1);mongoTemplate.updateFirst(query,update,"spit");}        

五 ElasticSearch(1)
第一步------解压
第二步------进入bin目录,输入命令: elasticsearch 9300和9200端口都起来了即可
重启 1.ctrl+c 2.y 3.elasticsearch
第三步------检测 在浏览器输入: http://localhost:9200 出现对应json数据,即为成功
第四步------创建索引库(put请求) http://localhost:9200/tensquare_elasticsearch
第五步------添加类型(post请求) http://localhost:9200/tensquare_elasticsearch/article
提交json数据— {
“title”:“spring教程”,
“content”:“spring框架教程”
}
返回数据— {
“_index”: “tensquare_elasticsearch”,
“_type”: “article”,
“_id”: “AWu1kPC9fUfKbzZPNqi4”,
“_version”: 1,
“result”: “created”,
“_shards”: {
“total”: 2,
“successful”: 1,
“failed”: 0
},
“created”: true
}
第六步------查询所有(get请求) http://localhost:9200/tensquare_elasticsearch/article/_search
第七步------修改(put请求) http://localhost:9200/tensquare_elasticsearch/article/AWu1kPC9fUfKbzZPNqi4
提交json数据— {
“title”:“spring教程”,
“content”:“杨超越舞蹈教程”
}
返回数据— {
“_index”: “tensquare_elasticsearch”,
“_type”: “article”,
“_id”: “AWu1kPC9fUfKbzZPNqi4”,
“_version”: 2,
“result”: “updated”,
“_shards”: {
“total”: 2,
“successful”: 1,
“failed”: 0
},
“created”: false
}
第八步------根据id查询(get请求) http://localhost:9200/tensquare_elasticsearch/article/AWu1kPC9fUfKbzZPNqi4
第九步------根据字段查询(get请求) http://localhost:9200/tensquare_elasticsearch/article/_search?q=content:杨超越
第十步------分词后再模糊查询(get请求) http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:s
第十一步------根据id删除(delete请求) http://localhost:9200/tensquare_elasticsearch/article/AWu1kPC9fUfKbzZPNqi4

五(2) head插件安装及使用(该插件相当于elasticsearch的图形化操作界面)
第一步------下载elasticsearch-head-master并解压
第二步------安装nodejs
第三步------安装cnpm(npm默认在国外,所有要安装国内的cnpm) npm install -g cnpm -registry=https://registry.npm.taobao.org
用 npm -v cnpm -v 检测是否安装成功
第四步------安装grunt npm install -g grunt-cli
第五步------安装依赖 cnpm install(要先进入package.json所在目录,再执行此命令)
第六步------进入head插件安装目录,启动head(默认端口9100) grunt server
第七步------访问: http://localhost:9100 进入head插件
第八步------解决跨域问题 修改elasticsearch配置文件:elasticsearch.yml,增加以下两句命令:
http.cors.enabled: true
http.cors.allow-origin: “*”

五(3) ik分词器
第一步------下载ik分词器(版本要和elasticsearch对应)并解压
第二步------直接将解压后的文件夹改名ik后,放到E:\elasticsearch-5.6.8\plugins文件夹下
第三步------重启elasticsearch
第四步------测试 (1)最小切分:http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序员
(2)最细切分:http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员
第五步------增加词条 (1)在E:\elasticsearch-5.6.8\plugins\ik\config文件夹下新建costum.dic文件,并设置编码为utf-8(无BOM的)
(2)在文件中写上词条,如传智播客(若不能识别,可能是系统原因,把第一行空出来,从第二行开始写词条即可)
(3)把costum.dic文件在IKAnalyzer.cfg.xml文件中声明
(4)重启elasticsearch

五(4) springboot整合elasticsearch(保存数据全过程)
第一步------添加依赖
org.springframework.data
spring-data-elasticsearch
3.0.6.RELEASE

第二步------在yml文件中添加内容 spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9300

第三步------创建实体类 @Document(indexName = “tensquare_article”,type = “article”)
public class Article implements Serializable {
@Id
private String id;
//是否索引,就是看该域是否能被搜索
//是否分词,就表示搜索的时候是整体匹配还是单词匹配
//是否存储,是否在页面上显示(不显示不写数据库对应字段即可)
@Field(index = true,analyzer=“ik_max_word”,searchAnalyzer=“ik_max_word”)
private String title;
@Field(index = true,analyzer=“ik_max_word”,searchAnalyzer=“ik_max_word”)
private String content;
private String state;//审核状态
}
第四步------创建Dao public interface ArticleDao extends ElasticsearchCrudRepository<Article,String> {}
第五步------创建Service @Service
public class ArticleService {
@Autowired
private ArticleDao articleDao;
public void save(Article article){
articleDao.save(article);
}
}
第六步------创建Controller @RestController
@RequestMapping("/article")
@CrossOrigin
public class ArticleController {
@Autowired
private ArticleService articleService;
@RequestMapping(method = RequestMethod.POST)
public Result save(@RequestBody Article article){
articleService.save(article);
return new Result(true, StatusCode.OK,“添加成功”);
}
}

五(5) Logstash安装与测试(Logstash是一款轻量级的日志搜集处理框架)
第一步------解压进入bin目录
第二步------在当前目录打开控制台,输入: logstash -e ‘input { stdin { } } output { stdout {} }’
第三步------控制台输入字符如 aaaaa 返回字符aaaaa即可
第四步------ MySQL数据导入Elasticsearch
(1) 在logstash-5.6.8安装目录下创建文件夹mysqletc (跟bin目录同级,名称随意)
(2) 文件夹下创建mysql.conf (名称随意) ,内容如下:
-----------------------------------------------------------------------------------------------------------
input {
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => “jdbc:mysql://192.168.47.141:3306/tensquare_article?characterEncoding=UTF8”
# the user we wish to excute our statement as
jdbc_user => “root”
jdbc_password => “root”
# the path to our downloaded jdbc driver
jdbc_driver_library => “E:/elasticsearch-logstach/logstash-5.6.8/mysqletc/mysql-connector-java-5.1.46.jar”
# the name of the driver class for mysql
jdbc_driver_class => “com.mysql.jdbc.Driver”
jdbc_paging_enabled => “true”
jdbc_page_size => “50000”
#以下对应着要执行的sql的绝对路径。
#statement_filepath => “”
statement => “select id,title,content from tb_article”
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为默认含义为每分钟都更新(测试结果,不同的话请留言指出)
schedule => "
* * * *"
}
}

					output {elasticsearch {#ESIP地址与端口hosts => "localhost:9200" #ES索引名称(自己定义的)index => "tensquare"#自增ID编号document_id => "%{id}"document_type => "article"}stdout {#以JSON格式输出codec => json_lines}}-----------------------------------------------------------------------------------------------------------(3) 将mysql驱动包mysql-connector-java-5.1.46.jar拷贝至D:/logstash-5.6.8/mysqletc/ 下(4) bin目录中打开cmd执行命令: logstash -f ../mysqletc/mysql.conf(5) 观察控制台输出,每间隔1分钟就执行一次sql查询{"@version":"1","id":"1","@timestamp":"2019-07-04T03:25:00.282Z","title":"张三","content":"哈哈哈"}{"@version":"1","id":"2","@timestamp":"2019-07-04T03:25:00.283Z","title":"李四","content":"吼吼吼"}{"@version":"1","id":"3","@timestamp":"2019-07-04T03:25:00.284Z","title":"王五","content":"嘿嘿嘿"}再次刷新elasticsearch-head的数据显示,看是否也更新了数据

五(6) Elasticsearch Docker环境下安装
第一步------下载镜像(省略) docker pull elasticsearch:5.6.8
第二步------创建容器 docker run -di --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
第三步------浏览器输入地址:http://192.168.184.134:9200/ 即可看到如下信息:
{
“name” : “OBa8tj0”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “vidAckHwR3q3yOgAENxqHg”,
“version” : {
“number” : “5.6.8”,
“build_hash” : “688ecce”,
“build_date” : “2018-02-16T16:46:30.010Z”,
“build_snapshot” : false,
“lucene_version” : “6.6.1”
},
“tagline” : “You Know, for Search”
}
第四步------修改demo的application.yml
spring:
data:
elasticsearch:
cluster‐nodes: 192.168.47.141:9300
第五步------测试运行程序报错:(这是因为elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件)
ERROR 14264 — [ main] .d.e.r.s.AbstractElasticsearchRepository : failed to load elasticsearch nodes :
org.elasticsearch.client.transport.NoNodeAvailableException:None of the configured nodes are available:
[{#transport#-1}{zMtsoNT0TYeD3Z_ziqtlcw}{192.168.47.141}{192.168.47.141:9300}]
第六步------进入容器(这步操作可以看到elasticsearch的安装路径): docker exec -it tensquare_elasticsearch /bin/bash 再进入config看到配置文件 elasticsearch.yml
第七步------因为容器没有vi命令,需要以文件挂载的方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置文件的修改
(1) 拷贝配置文件到宿主机:
docker cp tensquare_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml
(2) 停止和删除原来创建的容器:
docker stop tensquare_elasticsearch
docker rm tensquare_elasticsearch
(3) 重新执行创建容器命令:
docker run -di --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8
(4) 修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0 前的#去掉后保存文件退出。其作用是允许任何ip地址访问elasticsearch .
开发测试阶段可以这么做,生产环境下指定具体的IP
(5) 重新启动 docker restart tensquare_elasticsearch (会报错,因为还需要系统调优)
(6) 系统调优(一定要细致,尽量拷贝,注意中文字符,空格也可能是中文字符)
1------修改/etc/security/limits.conf ,追加内容:
* soft nofile 65536
* hard nofile 65536
nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
2------修改/etc/sysctl.conf,追加内容: vm.max_map_count=655360
限制一个进程可以拥有的VMA(虚拟内存区域)的数量
3------执行下面命令 修改内核参数马上生效 sysctl ‐p(不用执行,执行了可能出问题)
4------重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问

五(7) linux下IK分词器安装
(1) 将ik文件夹上传至宿主机
(2) 在宿主机中将ik文件夹拷贝到容器内 /usr/share/elasticsearch/plugins 目录下
docker cp ik tensquare_elasticsearch:/usr/share/elasticsearch/plugins/
(3) 重新启动,即可加载IK分词器

五(8) linux下HEAD插件安装
(1) 修改/usr/share/elasticsearch.yml ,添加允许跨域配置
http.cors.enabled: true
http.cors.allow-origin: “*”
(2) 重新启动elasticseach容器
(3) 下载head镜像(此步省略)
docker pull mobz/elasticsearch-head:5
(4) 创建head容器 docker run -di --name=tensquare_header -p 9100:9100 mobz/elasticsearch-head:5
(5) 访问地址 http://192.168.47.141:9100/ 并填写连接地址 点击connent按钮

六 RabbitMQ
1 windows环境下的安装(了解)
(1) 下载并安装 Eralng 配套软件中已提供otp_win64_20.2.exe (以管理员身份运行安装)
(2) 下载并安装rabbitmq 配套软件中已提供rabbitmq-server-3.7.4.exe。双击安装,注意不要安装在包含中文和 空格的目录下!
安装后window服务中就存在rabbitMQ了,并且是启动状态
(3) 安装管理界面(插件)进入rabbitMQ安装目录的sbin目录,输入命令 rabbitmq-plugins enable rabbitmq_management
(4) 打开浏览器,地址栏输入http://127.0.0.1:15672 ,即可看到管理界面的登陆页 用户名密码都是guest
2 docker环境下的安装
(1) 下载镜像:(此步省略) docker pull rabbitmq:management
(2) 创建容器,rabbitmq需要有映射以下端口: 5671 5672 4369 15671 15672 25672
15672 (if management plugin is enabled)
15671 management监听端口
5672, 5671 (AMQP 0-9-1 without and with TLS)
4369 (epmd) epmd 代表 Erlang 端口映射守护进程
25672 (Erlang distribution)
(3) docker run -di --name=tensquare_rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management
(4) 浏览器访问 http://192.168.184.134:15672/#/ 用户名密码都是guest
3 直接模式(Direct)我们需要将消息发给唯一一个节点时使用这种模式,这是最简单的一种形式。
(1) 创建队列(在图形化客户端中创建)
(2) 创建module模块并导入依赖包

org.springframework.boot
spring-boot-starter-amqp

(3) 编写配置文件application.yml
server:
port: 8099
spring:
rabbitmq:
host: 192.168.47.141
(4) 编写启动类
(5) 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitApplication.class)
public class ProductTest {

					@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void sendMsg(){rabbitTemplate.convertAndSend("itcast","直接模式测试");}}(6) 编写消息消费者类(也可以用map接收)@Component@RabbitListener(queues = "itcast")public class Customer1 {@RabbitHandlerpublic void getMsg(String message){System.out.println("直接模式消费消息"+message);}}(7) 先运行测试方法,再运行启动类,可以看到先向消息队列中添加了一条数据,然后取了出来,可以在控制台看发送的消息(8) 可以改变端口,运行三个消费者,然后消费者都等待数据,再运行测试方法添加三条数据,可以发现: 数据依次给了消费者,说明rabbit默认实现了负载均衡,好处是可以分摊服务器压力4 分列模式(Fanout) 任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上。(1) Exchange中添加3个队列,创建三个消费者类,启动项目(2) 测试使用Exchange方式,代码如下:@Testpublic void sendMsgTwo(){rabbitTemplate.convertAndSend("chuanzi","","分裂模式测试");}5 阿里云短信服务(1)添加依赖<dependency>    <groupId>com.aliyun</groupId>     <artifactId>aliyun-java-sdk-dysmsapi</artifactId>     <version>1.0.0‐SNAPSHOT</version>     </dependency> <dependency>  <groupId>com.aliyun</groupId>     <artifactId>aliyun-java-sdk-core</artifactId>     <version>3.2.5</version>     </dependency>  (2)配置文件添加内容aliyun:sms:accessKeyId: 不告诉你accessKeySecret: 不告诉你template_code: SMS_85735065sign_name: 黑马(3)创建短信工具类SmsUtil (阿里巴巴短信服务里拷贝)(4)修改消息监听类,完成短信发送@Component@RabbitListener(queues = "sms")public class SmsListener {@Autowiredprivate  SmsUtil smsUtil;@Value("${aliyun.sms.template_code}")private String template_code;//模板编号@Value("${aliyun.sms.sign_name}")private String sign_name;//签名@RabbitHandlerpublic void sendSms(Map<String,String> map){System.out.println("手机号:"+map.get("mobile"));System.out.println("验证码:"+map.get("code"));try {smsUtil.sendSms(map.get("mobile"),template_code,sign_name,"{\"number\":\""+ map.get("code") +"\"}");} catch (ClientException e) {e.printStackTrace();}}}

七(1) 密码加密
第一步------导入依赖

org.springframework.boot
spring-boot-starter-security

第二步------安全配置类
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
}
第三步------配置bean对象(在启动类中添加该方法)
@Bean
public BCryptPasswordEncoder bcryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
第四步------管理员密码加密
@Autowired
private BCryptPasswordEncoder encoder;

				public void add(Admin admin) {admin.setId( idWorker.nextId()+"" );String newPassword = encoder.encode(admin.getPassword());admin.setPassword(newPassword);adminDao.save(admin);}

第五步------管理员登录密码校验
(1) AdminDao增加方法定义 public Admin findByLoginname(String loginname);
(2) AdminService增加方法
public Admin findByLoginnameAndPassword(String loginname, String password){
Admin admin = adminDao.findByLoginname(loginname);
if( admin!=null && encoder.matches(password,admin.getPassword())){
return admin;
}else{
return null;
}
}
(3) AdminCtroller增加方法,如果admin不为空,则登录成功
(4) 用户密码加密同理

七(2) 微服务鉴权jwt
1 JJWT快速入门
(1) token的创建 创建maven工程,引入依赖

io.jsonwebtoken
jjwt
0.6.0

(2) 创建类CreateJwtTest,用于生成token
public class CreateJwt {
public static void main(String[] args) {
JwtBuilder jwtBuilder = Jwts.builder().setId(“666”).setSubject(“小马”).setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256,“itcast”)
.setExpiration(new Date(new Date().getTime()+60*1000))//自定义时间
.claim(“role”,“admin”);//自定义claims
System.out.println(jwtBuilder.compact());
}
}
(3) 每次运行的结果是不一样的,因为我们的载荷中包含了时间
(4) token的解析
public class ParseJwtTest {
public static void main(String[] args) {
Claims claims = Jwts.parser().setSigningKey(“itcast”).parseClaimsJws(“eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjI4MzI3NTIsImV4cCI6MTU2MjgzMjgxMiwicm9sZSI6ImFkbWluIn0.wDmOPD6zx5tUk67SBAxLQTfKtHv-tQsIBK4069xNiCw”)
.getBody();
System.out.println(“用户id:”+claims.getId());
System.out.println(“用户名:”+claims.getSubject());
System.out.println(“登录时间:”+new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).format(claims.getIssuedAt()));
System.out.println(“过期时间:”+new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).format(claims.getExpiration()));
System.out.println(“用户角色:”+claims.get(“role”));
}
}
(5) 超过过期时间会引发 io.jsonwebtoken.ExpiredJwtException 异常

2 项目中应用第一步------引入依赖jjwt第二步------创建JwtUtil工具类@ConfigurationProperties("jwt.config")public class JwtUtil {private String key ;private long ttl ;//一个小时public String getKey() {return key;}public void setKey(String key) {this.key = key;}public long getTtl() {return ttl;}public void setTtl(long ttl) {this.ttl = ttl;}/*** 生成JWT** @param id* @param subject* @return*/public String createJWT(String id, String subject, String roles) {long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);JwtBuilder builder = Jwts.builder().setId(id).setSubject(subject).setIssuedAt(now).signWith(SignatureAlgorithm.HS256, key).claim("roles", roles);if (ttl > 0) {builder.setExpiration( new Date( nowMillis + ttl));}return builder.compact();}/*** 解析JWT* @param jwtStr* @return*/public Claims parseJWT(String jwtStr){return  Jwts.parser().setSigningKey(key).parseClaimsJws(jwtStr).getBody();}}第三步------修改tensquare_user工程的application.yml, 添加配置jwt: config: key: itcast//盐ttl: 360000//过期时间第四步------主启动类中配置bean@Bean    public JwtUtil jwtUtil(){    return new util.JwtUtil();        } 第五步------修改AdminController的login方法@RequestMapping(value = "/login",method = RequestMethod.POST)public Result login(@RequestBody Map<String,String> map){Admin admin = adminService.findByLoginnameAndPassword(map.get("loginname"), map.get("password"));if(admin!=null){String token = jwtUtil.createJWT(admin.getId(), admin.getLoginname(), "admin");Map<String,Object> hmap = new HashMap<>();map.put("token",token);map.put("role","admin");return new Result(true,StatusCode.OK,"登录成功",map);}else{return new Result(false,StatusCode.LOGINERROR,"用户名或密码错误");}}第六步------使用拦截器方式实现token鉴权 添加拦截器 拦截器验证token@Componentpublic class JwtInterceptor implements HandlerInterceptor {@Autowiredprivate JwtUtil jwtUtil;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("经过了拦截器");//拦截器只负责把请求头中包含token的令牌进行一个解析验证String header = request.getHeader("Authorization");System.out.println(header);if(header!=null&&!header.equals("")){System.out.println("1111111111111");if(header.startsWith("Bearer ")){String token = header.substring(7);System.out.println(token);try {Claims claims = jwtUtil.parseJWT(token);String roles = (String) claims.get("roles");if(roles!=null && "admin".equals(roles)){System.out.println("-----------");request.setAttribute("claims_admin",token);}if(roles!=null && "user".equals(roles)){request.setAttribute("claims_user",token);}}catch (Exception e){throw new RuntimeException("令牌不正确!");}}}return true;}}第七步------配置拦截器类@Configurationpublic class InterceptorConfig extends WebMvcConfigurationSupport {@Autowiredprivate JwtInterceptor jwtInterceptor;@Overrideprotected void addInterceptors(InterceptorRegistry registry) {//注册拦截器要声明拦截器对象和要拦截的请求registry.addInterceptor(jwtInterceptor).addPathPatterns("/**").excludePathPatterns("/**/login/**");}}第八步------UserService的删除用户方法public void deleteById(String id) {Object token = request.getAttribute("claims_admin");if(token==null || "".equals(token)){throw new RuntimeException("权限不足");}userDao.deleteById(id);}第九步-----总结:	登录admin或user时创建token并发送给前台,前台得到token,如果是需要登录相关角色才能使用的功能,则讲tocken传到后台,拦截器拦截所有请求,如果带有规定的token头则拦截,验证token,不通过则权限不足,通过后再判断是admin还是user还是其他角色,讲tocken存在Request域中,key为具体的角色,最后在需要角色登录的功能上获取Request域中的tocken,存在则通过,不存在则权限不足

N 面试题
1.sql语句优化------join比子查询效率高
直接写字段比写*效率高
不要全表扫描,比如!=什么什么,in not in 用 EXISTS NOT EXISTS代替(涉及到非的都属于全表扫描)







查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. vuejs 组件+路由

    组件首先在src目录下新建一个components文件夹用于存放组件 然后在此文件夹里面新建一个 a.vue文件在a.vue中我们可以这么写<template><div id="acomponent">{{msg}}</div> </template><script type="text/javascript"> e…...

    2024/4/15 5:45:46
  2. Django 优秀资源大全

    Awesome Django 版权: https://github.com/haiiiiiyun/awesome-django-cn介绍Awesome-Django 是由 Roberto Rosario 发起和维护的 Django 资源列表。该列表收集了大量 Django 相关的优秀应用、项目等资源,方便了 Django 用户参考查阅。Django 优秀资源大全 则是依据 Awesome-D…...

    2024/4/12 19:33:30
  3. 大数据开发相关术语解析

    Java[dʒɑːvə]当前软件开发行业应用最广、就业量最大的编程语言,在各类编程语言排行榜长期位列第一。是企业软件开发的首选语言,也是Android系统的开发语言。Java吸取了C++语言的众多优点,是极好的面向对象编程语言,程序员可以很优雅的思维方式编写强大负责的软件程序。…...

    2024/4/18 6:15:40
  4. 大数据开发的26个专业术语

    Java[dʒɑːvə]当前软件开发行业应用最广、就业量最大的编程语言,在各类编程语言排行榜长期位列第一。是企业软件开发的首选语言,也是Android系统的开发语言。Java吸取了C++语言的众多优点,是极好的面向对象编程语言,程序员可以很优雅的思维方式编写强大负责的软件程序。…...

    2024/4/26 2:09:36
  5. Django Awesome-Django 优秀资源大全

    Django 优秀资源大全 Awesome Django [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uTExNluF-1578558344771)(https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)] 介绍 Awesome-Django 是由…...

    2024/4/27 15:02:03
  6. 实战 webpack 4 配置解析一

    配置 github 仓库:https://github.com/nystudio107/annotated-webpack-4-config 随着Web开发变得越来越复杂,我们需要工具来帮助我们构建现代网站。 这是一个复杂的webpack 4配置的完整的现实生产示例。构建现代网站已成为自定义应用程序的开发。网站不仅仅被当作一个营销网站…...

    2024/4/27 22:45:10
  7. Electron教程-学习Electron跨平台桌面应用开发介绍 学习前的准备工作【第一讲】

    Electron是一个跨平台的桌面应用开发框架,用html css js的技术开发桌面上面可以安装的软件。 “Electron又为前端开发者谋得了一份好的差事”。Electron视频教程:https://www.itying.com/goods-929.html想起在网路里流传很广的一句话“不要和老夫说什么C++,Java,老夫行走江…...

    2024/4/28 3:28:05
  8. vue.js 项目搭建以及访问页面http://localhost:8080 为空

    分析原因:可能是端口没有开放...

    2024/4/26 22:51:29
  9. Vue.js快速创建项目并启动

    Vue.js快速创建项目并启动 1、安装Node 官方网址:https://nodejs.org/en/ 在官网下载安装。 2、安装webpack npm install webpack -g 3、安装Vue脚手架 npm install vue-cli -g 4、创建模板项目。命令:vue init webpack 项目名(不能含中文)。如下图:上图中的配置信息如下…...

    2024/4/29 11:11:06
  10. Vue CLI 3 快速搭建项目

    Vue CLI 3 快速搭建项目Vue CLI 简介安装Vue CLI 3新建项目配置项目文件结构脚本运行开发服务器构建到生产环境代码检查单元测试参考 Vue CLI 简介 Vue CLI是一个用于开发Vue.js项目的脚手架工具,人们在用Vue开发项目时往往要用到很多的插件以及打包工具,而Vue CLI的存在帮助…...

    2024/4/11 0:54:48
  11. Vue.js 中使用PubSub.js 进行同级组件间通信

    项目设计中有个需求:在页面上新增数据成功后,需要在页面导航栏上显示一个小红点告诉用户当前数据已更新,请点击进去进行操作。如图所示在新增数据请求成功返回后,提示新增成功,并在这里显示数据有更新的标记。然后再用户点击跳转的同时这个小标记消失。由于左侧导航栏跟右…...

    2024/4/11 19:09:42
  12. 项目实战-爬坑系列vue-cli3.x中路由的使用(八)

    今天说一下路由的使用方法,因为vue-router的使用无论是在vue-cli2.x和vue-cli3.x中的是一样的,所以我在这里用的是vue-cli2.x的版本。 1、我的vue-router是在安装vue-cli中安装的,如果没有安装你需要先安装一下vue-router(建议还是在vue-cli中直接去选择安装vue-router) n…...

    2024/4/28 14:15:49
  13. .Vue路由(路由配置、传参、获取参数)

    this.$route 和 this.$router区别:this.$route 信息参数(query、prams)传参获取this.$router 功能函数,go(),push()等方法调用1.导入和使用路由(main.js):import Router from vue-router// 使用路由Vue.use(Router)//导入vue页面import RouterA from ../page/router/rout…...

    2024/4/29 21:43:56
  14. IDEA中新建Static Web项目没有vue.js

    在setting中找到plugin, 下载vue.js插件, 重启后就可以看到了...

    2024/4/10 9:05:20
  15. 后盾网lavarel视频项目---1、数据迁移

    后盾网lavarel视频项目---1、数据迁移 一、总结 一句话总结: 1、lavarel的数据迁移比较简单,就是用php来创建数据表 2、创建迁移文件:php artisan make:migration create_hd_table --create=hd 3、将迁移文件创建为表:php artisan migrate1、安装barryvdh/laravel-ide-help…...

    2024/4/29 5:07:07
  16. 后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码

    后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码 一、总结 一句话总结: 1、在phpstorm中设置:路径Tools/Deployment/Configuration 2、是将代码同步到远程的ftp服务器上面去:配置ftp 3、还可以在option里面设置Automatic Upload(always)1、phpstorm 配置ftp自…...

    2024/5/1 17:30:48
  17. Vue.js框架初识

    一、Vue框架简介 1、Vue.js 是目前最火的一个前端框架,和Angular.js、React.js 一起,并成为前端三大主流框架。2、Vue.js是用于构建用户界面的渐进式框架。3、在Vue中,一个核心的概念,就是让用户不再操作DOM元素,解放了用户的双手,让程序员可以更多的时间去关注业务逻辑。…...

    2024/4/28 16:33:51
  18. Vue.js——简介

    什么是Vue.jsVue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于Weex)Vue.js 是前端的主流框架之一,和Angular.js、React.js 一起,并成为前端三大主流框架!Vue.js …...

    2024/4/29 16:53:15
  19. 前端框架Vue.js

    Vue.js什么是Vue.jsVue.js的特点框架和库的区别后端的MVC框架和前端的MVVM框架区别 什么是Vue.js Vue.js是目前最火的一个前端框架,React是最流行的一个前端框架。Vue.js、Angular.js和React.js并成为前端三大主流框架。 Vue.js是一套构建用户界面的框架,只关注视图层,容易上…...

    2024/4/22 15:55:35
  20. jquery.js对比vue.js

    简单介绍:jquery.js : 其实就是一个函数库,它提供了功能强大而且使用方便的各种函数.使用jquery.js可以很方便的进行各种DOM操作.vue.js : 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,vue 被设计为可以自底向上逐层应用.vue 的核心库只关注视图层,不仅易于上手…...

    2024/4/12 16:46:58

最新文章

  1. (附源码)超级简单的SSM图书交易系统,包含技术栈、架构图、设计图、教程

    先看首页效果&#xff0c;包含买家、卖家、管理员三个端口。启动有问题可以联系我解决&#xff0c;微信&#xff1a;keepgoing4u 架构图&#xff1a; 用到软件 Jdk1.8 Mysql IntelliJ IDEA Maven 项目技术&#xff1a; Spring Boot SSM JSP mybatis Maven B/S模式 配置…...

    2024/5/1 21:24:11
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 如何转行成为产品经理?

    转行NPDP也是很合适的一条发展路径&#xff0c;之后从事新产品开发相关工作~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff…...

    2024/5/1 13:02:24
  4. 【超简单】基于PaddleSpeech搭建个人语音听写服务

    一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…...

    2024/5/1 13:13:48
  5. 2019最新23套前端(包含17套vue.js视频教程2套webpack 4套react native)

    ...

    2024/5/1 12:40:14
  6. NPM方法安装Vue.js 超详细~

    首先,先列出我们接下来需要的东西:node.js环境(npm包管理器) vue-cli 脚手架构建工具 cnpm npm的淘宝镜像1.安装Node.js node.js官网:https://nodejs.org/en/ 从node.js官网下载并安装node,下载完成后,一直点下一步就ok了,安装完之后,我们通过打开命令行工具(win+R)…...

    2024/4/23 7:25:22
  7. Vue.js 生产环境部署

    生产环境部署开启生产环境模式开发环境下,Vue 会提供很多警告来帮你对付常见的错误与陷阱。而在生产环境下,这些警告语句却没有用,反而会增加应用的体积。此外,有些警告检查还有一些小的运行时开销,这在生产环境模式下是可以避免的。不使用构建工具如果用 Vue 完整独立版本…...

    2024/4/26 13:48:07
  8. vue.js从入门到放弃1--环境安装,包括linux和window

    1.windows安装vue.js环境。1.1 先决条件,本地装了npm安装环境,查看的话,就新建一个目录,然后shift+右键->在此处打开命令行。 然后输入npm -v 去查看npm的版本 1.2 更新npm的版本到最新的版本npm i -g npm1.3 安装cnpm,这是淘宝的npm资源,安装vue会快很多,然后将npm设…...

    2024/4/19 13:40:23
  9. vue-cli3.x + vux 环境配置

    vue-cli 3.x 使用全新配置模式,GUI操作,无webpackconfig文件。 根据官方文档,根目录下新建 vue.config.js,可修改相关webpack配置npm install vux --save npm install vux-loader --save-dev安装成功后 // vue.config.js 文件如下const vuxLoader = require(vux-loader)mod…...

    2024/4/27 7:49:19
  10. Vue开发环境配置

    Vue.js是一个构建数据驱动的web界面的渐进式框架,其通过尽可能简单的API实现响应的数据绑定和组合的视图组件。与传统的Angular.js和React框架相比,Vue.js不仅具有简单易学和上手快的特点,并且可以通过组件的特性实现单页面的局部刷新和页面组件的重复利用,因此使用Vue.js技…...

    2024/4/25 9:26:22
  11. nodejs运行vue项目

    1、下载nodejs官网:https://nodejs.org/en/ (下图是我下载的版本)2、下载后压缩包3、开始安装安装很简单,默认下一步,就可以了(中间可选择安装路径)安装后里面的文件如图4、安装后判断是否安装成功 及环境变量配置node -v ; npm -v (一般新的node安装自带npm包管理器…...

    2024/4/24 8:38:07
  12. Vue-Cli 4版本运行环境配置

    一、问题描述 Vue-Cli自3.x以上版本取消了config目录,我们没法直接在config目录下的文件中对运行环境进行配置,因此需要开发者手动完成配置。 二、配置方法 1.新建vue.config.js文件 在项目的根目录新建vue.config.js文件,并在该文件中配置相应的启动项。 // vue.config.js …...

    2024/4/24 16:35:13
  13. 前后端分离之Vue(一)环境配置

    Vue环境配置前言:之前开发过微信小程序,感觉前后端分离的开发非常舒服,在线学习了下Vue这个前端框架,感觉与小程序的开发类似。动手搭建下前后端分离的项目,做个简单的Demo,体会下前后端分离的开发。写下这个系列也是记录自己在学习Vue的实践过程。Vue官网地址,可在线学…...

    2024/4/29 13:58:54
  14. 使用 Docker 部署 Vue.js + Go 项目

    最近公司要求搞一个 dashboard ,前端用 Vue.js 框架,后端用 Go 语言写的。在决定用 Docker 进行部署的时候,遇到了很多问题,特此记录。由于这个项目需要使用 AWS 中的 DynamoDB,因此需要先在 Docker 的 image 中安装 aws-cli,然而 aws-cli 只能依赖 Python 进行安装。因为…...

    2024/4/30 20:13:56
  15. Vue.js分环境打包到部署-并用nginx代理请求后端接口

    1.Vue.js分环境打包 vue.js分环境打包(vue-cli2.0),主要应对开发环境和生产环境请求后端地址ip不同,避免每次打包需要反复修改baseUrl的问题,根据npm run dev / npm build 打包生成不同baseUrl 配置。 打开config目录 分别修改以下两个文件如下: dev.env.js 开发环境 use …...

    2024/4/26 2:20:32
  16. vue-cli 3搭建vue项目后对vue.config.js进行简单配置

    vue-cli 3搭建vue项目后目录下没有vue.config.js文件,如果要配置,需要自己手动在根目录(与package.json同级目录)下新建此文件下面是简单的配置及说明module.exports = {// 详细、更多配置请查看官网https://cli.vuejs.org/zh/config/#vue-config-js/** 区分打包环境与开发…...

    2024/4/20 15:52:50
  17. 让vue-cli3.0 配置简单起来(vue.config.js编结)

    前提:随着vue脚手架的升级,越来越便于开发者开发和维护项目,本质上vue-cli3提供了基础的配置和可拓展的空间,但是vue-cli3官网对于新脚手架的用例都比较简洁,更多的内容需要我们去研究,更多都是基于webpack去拓展。为了更好的入门,我写了个常用配置的小总结,下面我们来…...

    2024/5/1 6:27:49
  18. vue.js 三种方式安装(转)

    https://blog.csdn.net/m0_37479246/article/details/78836686https://www.cnblogs.com/winter92/p/7117057.html的版本号,则说明你安装成功了。npm包管理器,是集成在node中的,所以安装了node也就有了npm,直接输入 npm -v 命令,显示npm的版本信息。到目前为止,node的环境已…...

    2024/4/25 1:30:16
  19. 基于node.js开发环境下创建及开发vue.js项目的环境配置骤

    基于node.js开发环境下创建开发vue.js项目的环境配置骤如下: 步骤一:安装node.js,安装完后运行node -v命令检安装node的查版本,判断是否安装成功。Npm是node.js包管理工具。安装node就会自动安装它的包管理工具,查看是否成功安装运行npm -v命令即可。 //这些是在互联网电脑…...

    2024/4/28 14:32:37
  20. vue-cli4.0之vue.config.js的配置项

    const path = require(“path”); module.exports = { // 部署应用时的基本 URL publicPath: process.env.NODE_ENV === “production” ? “/production-sub-path/” : “/”, // build时构建文件的目录 构建时传入 --no-clean 可关闭该行为 outputDir: “dist”, // build时…...

    2024/4/22 8:37:23
  21. 前端自动化测试jest教程9-TDD+单元测试,BDD+集成测试

    准备条件 以第1节教程的创建的目录和代码为基础进行讲解。如果没有看过第1节教程,请关注我,查看以往该系列的文章 这节教程主要讲解TDD+单元测试,BDD+集成测试 什么是TDD? Test Driven Development 测试驱动开发 顾名思义,就是我们先根据需求去写测试用例,根据测试用例再…...

    2024/4/30 8:48:41
  22. react基础教程

    react基础教程官网安装目录结构hello world组件化图片和样式表的引入学习资源推荐:https://blog.csdn.net/qq_42813491/article/details/90213353官网https://react.docschina.org/官方教程:https://react.docschina.org/tutorial/tutorial.html介绍什么的就不说了,从代码开…...

    2024/4/22 13:22:58
  23. 带你玩转vue——简单高效的vue.config.js配置

    通用的vue.config.js配置 module.exports = {publicPath: ./,devServer: {port: 7004,disableHostCheck: true},assetsDir:static,indexPath:"index.html",//lintOnSave: false,runtimeCompiler: true,productionSourceMap: false,css:{extract:true,sourceMap: fals…...

    2024/4/22 9:56:59
  24. Konva快速入门

    konva简单理解1、 当我们刚接触到canvas时,我们期待如何去画出如游戏中的图画,而konva便是让我们更加便捷画图的库,如同JS有jQuery,首先我们要了解图画的构造把整个视图看做一个舞台stage 而舞台中的每一层,看做layer layer层中有许多group组 在group中绘制画图、图片等2、…...

    2024/5/1 17:30:44
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57