JAVA菜鸟从零开始----面试题篇

本文涵盖Java基础、面向对象、多线程、数据库等核心技术知识点,解析常见面试题,包括数据类型、集合类、线程安全、设计模式等内容。

JAVA菜鸟从零开始----面试题篇

一、基础

1.1、java的8种基本数据类型

byte,short,int,long,float,double,char,boolean

1.2、按照从小到大排序

byte(1字节) < short(2字节) < int(4字节) < long(8字节) < float(4字节,2的次方) < double(8字节,2的次方)

注意:float的取值范围大于long,取是是2的幂次方

char(单个字符,java中占2字节) boolean(1字节)

1.3、数组的排序

冒泡排序、选择排序、插入排序、快速排序

例:冒泡排序——取相邻两个数进行比较,较大的数交换到后面,第一轮就可以把最大的数交换到数组末尾,后面遍历的次数依次减一(不用遍历最后面的数了),直到遍历到第一个数

1.4、hashmap底层原理

hashmap底层采用哈希表这种数据结构,在jdk1.7中使用的是数组+链表,在jdk1.8中做了优化,采用的是数组+链表+红黑树,当某个桶位上链表的长度过长【>=8】,并且数组长度【>64】时,会将该桶位上的链表进行数化,来提高哈希表的整体查找性能。

1.5、hashmap put元素的过程
  1. hashmap中的table数组的创建延迟到第一次put元素的时候,采用延迟加载的策略,提高内存的利用率。
  2. 它首次扩容的长度为16,扩容阈值为0.75,扩容策略为数组的2倍,数组容量一定为2的幂次方,尽量避免哈希冲突。
  3. 它put元素的过程是首先通过key的哈希码计算出数组下标所在的位置,如果当前位置为null就创建一个node对象类封装元素的key和value并加入到计算出来的索引位置。
  4. 如果添加的元素的key与当前桶位上的元素的key相等则进行value的覆盖操作
  5. 如果添加的元素的key与当前桶位上的元素的key不相等,则执行添加操作,分两种情况:1.红黑树,2.链表
1.6、= = 和 equals 的区别?
  • “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值
  • equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值
1.7、ajax中GET和POST区别?
  1. 语义化的区别:get偏向于获取,post偏向于提交数据
  2. 携带给后端的信息位置不一样
    get直接在地址后面拼接查询字符串
    post在请求体内进行信息的查询
  3. 携带的数据格式不一样
    get:因为携带的数据是直接拼接在地址后面,只能使用url编码
    post:因为在请求体内,所以可有多种形式,但是需要提前说明
  4. 携带的数据大小不一样
    get:因为拼接在地址后面,大小在2kb左右
    post:因为在请求体内,数据大小不受限制,除非服务器有显示
  5. 安全性能
    get:明文发送,不安全
    post:相对安全
  6. 浏览器缓存
    get:浏览器会主动缓存
    post:浏览器不会主动缓存
1.8 #{ }和 ${ } 的区别?

#{}:相当于原生JDBC中使用?在sql语句中进行参数的占位,然后通过PreparedStatment进行参数值的注入,在这个过程中会自动的进行java类型和mysql数据类型的自动转换,而且还可以有效的防止sql注入,推荐使用的方式
${}:相当于将传入的参数值直接以字符串的方式拼接到sql语句中,存在注入问题【不安全】,并且不会进行从JAVA类型到Sql的类型的自动转换(批量删除员工信息,排序,不清楚表名情况下的操作)

1.9、bean的生命周期

可以通过bean标签的scope属性设置组件的生命周期
取值常用的两个:singleton【单例 默认的】 prototype【多例】

单例:在容器初始化时创建对象,在容器关闭时销毁【基本都是单例】

多例:在用户获取该对象时创建,而且每次创建的都是新的对象,而且对象的创建时机发生在从容器获取对象时

实例化,属性赋值,初始化,销毁

1.10、常见的响应状态码:

200 OK :表示一切正常
302:重定向
304: 未修改的 读取了本地缓存
400 参数的格式存在问题
401:没有认证
403:没有访问权限
404:未找到请求的资源 请求地址写错了
405:请求方式错误
429:微服务,请求过于频繁
500 Server Error: JAVA代码出现异常
503:服务器正在启动,未启动成功

4xx都是客户端的问题 5xx都是服务器的问题

二、面向对象

2.1、谈谈你对面向对象的理解
  1. 面向对象和面向过程,是两种不同的处理问题的角度。
  2. 面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象)、及各自需要做什么。

比如:洗衣机洗衣服
面向过程会将任务拆解成一系列的步骤(函数),
1、打开洗衣机——>2、放衣服——>3、放洗衣粉——>4、清洗——>5、烘干
面向对象会拆出人和洗衣机两个对象:
    人:打开洗衣服、放衣服、放洗衣粉
    洗衣机:清洗、烘干
  从以上例子能看出,面向过程比较直接高效,而面向对象更易于复用、扩展和维护。
原文链接

2.2、方法的重载和重写

方法的重载发生在同一个类中,方法的参数个数,参数顺序或者参数类型不同。
方法的重写发生在父子类之间,要有父类引用指向子类对象,方法的签名完全相同,方法体不同

2.3、抽象类和接口的区别
  1. 抽象类是单继承,接口是多实现
  2. 抽象类是从属性和行为两个方向进行抽象,接口是同行为单一方向进行抽象,因此接口抽象能力更强
  3. 抽象类既可以是方法声明,也可以是方法实现,接口只能是方法声明
  4. 抽象类可以定义成员变量,接口只能定义属性

三、IO流

3.1、流的分类

按流向:输入流、输出流
按传输单位:字节流、字符流
按流对象的结构:基本流、包装流

四、多线程

4.1、创建线程的几种方式
  1. 继承thread类,重写run方法,不能再继承其他类
  2. 实现runnable接口,重写run方法,不能有返回值,不能声明异常
  3. 实现callable接口,重写call方法,java 8提供
  4. 使用线程池:固定个数的线程池,动态个数线程池
4.2、线程池的优势
  1. 降低资源消耗
  2. 提高响应速度
  3. 提高线程的可管理性
4.2、有用过哪些线程池
  • 定长线程池(FixedThreadPool)
  • 定时线程池(ScheduledThreadPool )
  • 可缓存线程池(CachedThreadPool)
  • 单线程化线程池(SingleThreadExecutor)

五、线程安全

5.1、string是线程安全的吗,如何解决?

string是final修饰的类,是不可变的,所以是线程安全的。
stringbuilder是可变的,不是线程安全的。
stringbuffer是可变的,所有的公开方法被synchronized修饰,是线程安全的

运行速度 string > stringbuilder > stringbuffer

5.2、ArrayList不是线程安全的,如何解决?
  1. 使用线程安全版的Vector
  2. 调用Collections工具类的synchronizedXXX方法将当前集合转换成线程安全的,也是采取加锁的方式来保证线程安全的
  3. 使用JUC包中提供的增强版线程安全集合CopyOnWriteArrayList,用法和ArrayList一样【推荐
5.3、HashMap不是线程安全的,如何解决?
  1. 使用Hashtable
  2. 调用Collections工具类的方法
  3. 使用JUC包中提供的ConcurrentHashMap,性能比前两种方式更佳,同时可以保证线程安全【推荐
5.4、ReentrantLock 与 synchronized的区别
  • synchronized 属于非公平锁,ReentrantLock 支持公平锁、非公平锁;
  • synchronized 不支持尝试加锁,ReentrantLock 支持尝试加锁,支持带超时时间的尝试加锁;
  • synchronized 不支持响应中断的获取锁,ReentrantLock 提供了响应中断的加锁方法;
  • synchronized 不支持带条件,ReentrantLock支持;
  • synchronized 是关键字
  • 其他底层实现上、实现机制上、锁的对象上、释放锁的方式上也有区别。

六、线程通信

6.1、如何实现线程之间的通信

wait() notify() notifyAll() 这三个方法都是基于锁对象的,object类的方法
sleep() 线程类的方法

6.2、说明一下sleep方法和wait方法的区别?
  • sleep方法属于线程类的一个静态方法 wait方法属于Object对象的方法
  • wait方法必须和synchronized一起使用,sleep方法没有这个要求
  • .wait方法在进入等待后立马释放锁,sleep方法如果写在同步代码块中,进入休眠后不会释放锁

七、网络编程

IP+端口的组成称为套接字 Socke

应用层常用协议:http https ftp

传输层协议:tcp udp

八、反射

8.1、什么是反射?

在运行状态中。

  • 获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等
  • 获取任意对象的属性,并且能改变对象的属性
  • 调用任意对象的方法
  • 判断任意一个对象所属的类
  • 实例化任意一个类的对象
8.2、反射获取字节码对象的三种方式
  • Class.forName(“类的全限定名”) 【使用最多】
  • 类型名.class【掌握】
  • 基于一个对象去调用它的getClass()方法,获取对象实际类型的字节码对象【了解】

九、设计模式

9.1、你有使用过哪些设计模式?
  • 单例模式:配置类config的对象只能有一个,bean就是单例的。
  • 工厂模式: 使用BeanFactory工厂创建对象, 不用自己去new对象
  • 代理模式: spring中的aop底层实现就是动态代理
  • 适配器模式: SpringMvc中的HandlerInterceptorAdapter就是适配器模式
  • 建造者模式: mybatis中的SqlsessionFactoryBuilder就是建造者模式, 遵循了单一职责原则, 只做一件事。
  • 生产者消费者模式:MQ使用的就是生产者消费者模式

十、前端相关

10.1、css实现上下左右垂直居中对齐的方式

1.使用flex布局

<div class="center-item">
<div> 居中块状</div>
</div>

.center-item{
 display:flex;
 align-items:center;
 justify-content:center;
}
.content {
            width: 300px;
            height: 300px;
            position: absolute;
           content: '';
            top: 50%; /*偏移*/
            left:50%;
            transform: translate(-50%,-50%);
        }

(略)

十一、jdk1.8新特性

stream流,lambda表达式,支持链式编程,添加了新的时间和日期api。
hashmap中添加了红黑树
线程创建添加了callable接口
java8新特性

十二、数据库

【数据库基本操作】:

12.1、表的修改(DDL语句)
 表的修改(DDL语句)

  创建表   - create table 表名(列名 varchar(20))
 		   engine=innodb
 		   default charset=utf8   
  删除表   - 	drop table (不保留表结构)
  添加一列 - alter table 表名 add column 列名 varchra(20)
  删除该列 - alter table 表名 drop column 列名 
12.2、数据的修改(DML语句)
 数据的修改(DML语句)

  添加 - insert into 表名 values(字段值)
  删除 - delete from 表名 where 条件 
  	  - truncate table 表名   (保留表结构)
  修改 - update 表名 set 字段名1=值,字段名2=值 where 条件 
  查看 - select 查询内容 from 表名 where 条件 
  查看表中所有数据 - select* from 表名 
  查询符合条件的行数 - select count(1) from 表名 where 条件
  多表查询 - select * from 表1 join 表2
  		  on 合并条件
  		  order by  排序条件
12.3、用户访问权限修改(DCL语句)
 用户访问权限修改(DCL语句)

 添加用户 - create user 用户名 identified by 密码
 设置权限 - grant select on 数据库.表名 to 用户名
 回收权限 - revoke 操作类型【增删改查】 on 数据库.表名 from 用户名
 删除用户 - drop user 用户名 
12.4、事务的属性
 事务的属性
 1.原子性
 2.一致性
 3.隔离性
 4.持久性
12.5、事务的四种隔离级别
 事务的四种隔离级别?
 读未提交 `read uncommitted`(脏读)
 读已提交 `read committed`
 可重复读 `repeatable read`
 串行化   ` serializable `
12.6、数据库表设计
 数据库表设计
 第一范式:列不可再分,表中的每个字段属性应该保证原子性
 第二范式:表中除了主键字段外,所有的非主键字段必须完全依赖主键不能产生部分依赖
 第三范式:除了主键字段外,其他所有非主键字段必须直接依赖主键不能产生传递依赖

十三、spring

写一个接口从控制器到数据库有哪些注解
@Controller
@restController
@RequestMapping
@ResponseBody
@PathVariable	接收请求路径中的占位符的值
@RequestParam	接收请求路径后,也就是问号后面的参数	可以设置默认值
@RequestBody	接收前端传给后端的json字符串中的数据(请求体中的数据)

@Required		按属性注入
@Autowired		按类型注入
@AllArgsConstructor		全参构造器注入
@RequiredArgsConstructor	生成带有必需参数的构造函数。 
@NonNull

@SpringBootApplication
@MapperScan			扫描mapper层
@Service
@Mapper
@Value

十四、Redis

redis 有使用过吗?谈谈你对redis的理解

启动redis: redis-server

1.redis是一个基于内存存储的非关系型数据库,它的存储方式是键值对。
2.它提供了丰富的数据类型,9种,常见的有5种:string,list,set,zset,hash,来满足不同的业务场景需求
3.redis可以通过哨兵模式和分布式集群解决redis在生产中的高可用问题

我们可以将redis作为mysql的一个补充,也可以将redis作为缓存服务,也可以用作分布式锁,秒杀活动数据存储,登录验证码获取,计数,随机数的获取等。

//利用Redis的列表和有序集合的特点,可以制作排行榜系统,而排行榜系统目前在商城类、新闻类、博客类等等,都是比不可缺的。
//社交网络关注、点赞、推送等等
//set集合,使用spop可以用来抽奖和发放优惠券等

#当然redis也存在一些问题,就比如停电或者服务突然宕机,redis提供了两种持久化策略:RDB,AOF
redis默认开启的是RDB持久化方式,在指定的时间间隔内执行指定次数的写操作,则将内存中的数据集以快照的方式写入到磁盘中去,也就是 Snapshot 快照,恢复时是将快照文件直接读到内存里,适合大规模的数据恢复,但是他的数据一致性和完整性较差。
redis中的AOF持久化方式,默认每秒将写操作日志追加到AOF文件中,AOF的数据完整性比RDB高,但记录的内容多了,会影响数据恢复的效率,redis针对AOF文件过大的问题,提供了重写的搜身机制。
如果只打算使用redis做缓存,可以只开启RDB,如果是打算作为数据库来使用,建议RDB和AOF都开启。

###缓存击穿:**
 不设置过期时间(不推荐)
 加锁(分布式锁),两次判断

###缓存穿透:**
 缓存空值:存在大量的垃圾数据
 使用Redis set:集合判断元素是否存在 时间复杂度 O(n) 效率低
 布隆过滤器

###缓存雪崩:**
 分散key的过期时间	
 设置永不过期

###缓存预热:**
 定时去触发将底层数据库内的热点数据加载到缓存内

###缓存更新/缓存同步**:使用canal实现数据双写一致性?(canal是由阿里开源的)
	数据库发生修改,mysql会写一个binlog日志,这是一个二进制文件,借用canal这个工具解析日志,解析之后发送到mq里面,mq发送到redis里面进行修改同步
    //(主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。Canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 `dump`协议,MySQL mater收到canal发送过来的`dump`请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。)

###缓存降级:**
使用Sentinel熔断降级策略进行服务熔断降级

十五、Nginx(端口80)

nginx有了解过吗,在哪里用过?

服务器反向代理
前端页面部署
负载均衡

nginx中如何实现session共享

ip hash
开启redis缓存

十六、Elasticsearch(端口9200)

elasticsearch 有使用过吗?是如何使用的
**1.倒排索引**

**2.IK分词器**

默认分词器(standard),对英文友好,对中文不友好

一般分词器有:

1. ​	ik分词器:

   ​		ik_smart(最少切分)

   ​		ik_max_word(最细切分)

   1. 拼音分词器:pinyin_analyzer

**3.常用的api**

​	prefix: 前缀查询

​	range:范围查询

​	分页查询,复合查询,高亮查询

​	过滤,排序,复合

​	求平均值,分数,最大值,最小值

​	拼音分词器

**4.索引库同步数据库**

​	思路1:商品信息发生变化时,业务层同步更新,维护效率低,耦合度高

​	思路2:定时任务,数据量大,占用内存大

​	思路3:  1,数据增删改,维护这条数据的修改时间

​			2,查询最近发生变化的商品信息(修改时间>最后修改时间)

​			3,使用logstash管道将最近发生变化的商品信息同步更新到索引库

**5.开发中的问题**

1. 大小写问题:加一个字段,把自动小写改成false
2. 再过滤查询中,过滤出用户不期望的数据:设置至少瞒住一个条件字段
3. 删除的商品怎么同步更新:逻辑删除+搜索业务中进行过滤(过滤出没有删除的商品信息)

**6.可视化工具kibana(端口5601)**

十七、RocketMQ

有使用过mq吗,了解mq的相关组件吗
mq:是生产者消费者的设计模式

生产者:往queue存放消息
消息队列:存储消息
消费者:消费消息

mq的优势是:
		1.mq可以异步调用,避免同步调用阻塞线程导致熔断降级,
		2.可以实现应用的解耦,容错率高
		3.他有一个消息队列。可以将大量请求暂存起来,分散很长一段时间处理,避免请求丢失和服务器被压垮
        
为什么用RocketMQ(阿里),相对于其他mq来说,接口简单易用,而且毕竟在阿里大规模应用过,有阿里品牌保障,	而且一个很大的优势在于,阿里出品都是java系的,我们可以自己阅读源码,定制自己公司的MQ,可以掌控

##MQ怎么解决消息发送不丢失?
失败原因: 1:broker宕机 2:网络原因(局域网可以忽略) 3:网络彻底中断(假如是外网,比如欠费就真的没啦) 解决办法: mq有一个消息重发机制,网络抖动,下一次再发就可以啦,可以设置重试次数。 假如是broker宕机,mq还有一个失败隔离,换一个broker(只能发同步消息) 业务补偿,暂存在redis中,业务当key,消息当value或者mysql中然后开启定时任务再次进行重试 答:RocketMQ发送消息默认有重试机制,当消息发送失败会重试2次,可设置重试次数。
//进行业务补偿 当网络出现问题,消息发送失败,可以将数据存储到redis或mysql中然后开启定时任务再次进行重试。

##什么是消息幂等,怎么解决消息幂等?
拿处理订单为例,根据订单号做为唯一令牌,在redis中使用setnx对订单号进行设置。当其他消费者根 据订单号去做setnx操作时,就会返回0,则不继续进行一下操作。

处理幂等问题: 一进入页面就生成一个幂等令牌,发送请求的时候携带上幂等令牌,然后将携带了令牌的请求做唯一处理(即 只能处理一次,可以利用redis中的setnx来处理) 

客户支付成功后,微信调用回调接口访问后台,消费成功后,将消息反馈给微信,但因为网络异常等原因导致 反馈失败,微信便会重新调用回调接口。 此时可以通过订单号作为唯一令牌,利用订单状态做唯一处理。

##说说你在项目中怎么使用的mq?
1、利用mq的延时消息解决订单超时未支付问题?
	//规定用户在30分钟内必须支付, 
	1、调用微信下单接口获取到code_url(支付链接),将订单号发送到延时消息队列。
	2、等到30分钟后消费者获取到消息,使用微信的查询订单支付状态的接口,查看订单是否支付。
	3、如果支付状态为nopay,则调用微信的关闭订单接口,使超时用户无法支付。 
	4、如果订单关闭成功,则释放掉库存。

2、商品索引库同步,短信发送
	1、ElasticSearch可以使用MQ来实现解耦同步,将消息放入消息对列,由消费者完成es索引的同步。 
	2、短信发送 因为使用的是阿里大鱼的接口实现的,当网络波动时,同时多个请求调用短信发送,会导致线程阻 塞以及耗尽线程池。那么可以通过异步 方式,将消息存放到消息队列中,由消费者完成短信发送的功能。 (这样做的好处是:解耦,以及异步发送,不会阻塞线程) 
	3、如何实现一键秒杀 服务器接收到下单请求,直接将下单消息存放入消息队列中,然后由多个消费者同时到Redis中获取锁, 谁先获取到锁,谁就开始进行下单。

十八、SpringCloud

谈谈你对springcloud的理解,以及各个组件的作用
nacos 【name server】:注册中心,解决服务的注册与发现 
			一个nacos可以做到两用,一个充当注册中心,一个充当配置中心 
nacos【config】:配置中心,微服务配置文件的中心化管理,同时配置信息的动态刷新 

Ribbon:客户端负载均衡器,解决微服务集群负载均衡的问题 
		工作流程:1、拦截所有的远程调用; 
				2、获取请求url,从url中解析出servicename 
				3、根据servicename获取实例列表,从本地缓存中获取实例列表,如果本地缓存中没						有,就 向nacos注册中心请求获取实例列 表,缓存一份到本地内存中,如果本地缓					存中有,直接 返回实例列表; 
				4、从实例列表中通过相应的负载均衡算法,选取一个实例(一个实例就是一个ip+prot,						然后把ip和端口传给resttemplate, 然后把ip和端口传给resttemplate再去找						这个实例发请求,得到响应的结果) ##本地缓存和远程调用通过一个定时任务						(35s)保证数据同步,解决缓存不一致的问题,最新的会对本地缓存进行覆盖 						##nacos-server不能关闭,否则不能感知服务的上线和下线 
				
Openfeign:声明式HTTP客户端,解决微服务之间远程调用问题 
			服务消费者通过@EnableFeignClients来开启openfeign功能,需要调用哪个接口,就去通过 @FeignClient(服务提供者名称)来声明哪个接口 
			
Sentinel:微服务流量防卫兵,以流量为入口,保护微服务,防止服务雪崩

gateway:微服务网关,服务集群的入口,路由转发以及负载均衡(全局认证、流控) 

sleuth:链路追踪,可以快速的进行链路的错误和耗时排查 

seata:分布式事务解决方案 版本号1.4.2    TC TM RM

十九、MySQL

**说说mysql的索引数据结构?**

> **Hash** 和 **B+Tree**
>
> Hash索引把数据以hash形式组织起来,因此当**查找某一条记录的时候,速度非常快**。但是因为hash结构,每个键只对应一个值,而且是散列的方式分布。所以它并不支持范围查找和排序等功能。
>
> B+Tree是mysql使用最频繁的一个索引数据结构,是Inodb和Myisam存储引擎模式的索引类型。相对Hash索引,B+Tree在查找单条记录的速度比不上Hash索引,但是因为**更适合排序,范围查询**等操作,所以它更受欢迎。毕竟不可能只对数据库进行单条记录的操作。
>
> 
>
> **b+树 相比于 b树的查询优势:**
>
> b+树的中间节点不保存数据,都存在叶子结点,所以磁盘页能容纳更多节点元素,更“矮胖”;
>
> b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定(并不慢);
>
> 对于范围查找来说,b+树只需遍历叶子节点链表即可,b树却需要重复地中序遍历、



**mysql的两种存储引擎模式**

==Myisam==和==innodb==的区别

最大的区别是 myisam不支持事务,innodb支持事务

myisam是表锁,不适合高并发,innodb的行锁,适合高并发的操作



**mysql的优化**:

> 索引优化:比如用户表,有名字,电话,邮箱,建立多列索引,遵循最左前缀法则,
>
> **1.定义索引:**  索引:排序好的可以提供快速查询的数据结构
>
> **2.开启慢查询**
>
> ​	默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,
>
> ​	查看慢查询是否开启:mysql> show variables  like '%slow_query_log%';
>
> ​	开启慢查询:  set global slow_query_log=1;
>
> **3.druid监控台  localhost:8080/druid/index.html**
>
> **4.sql语句全部大写**
>
> **5.最左前缀法则:主要针对多列索引,**而且不能用or关键字  排序和分组都要遵循最左前缀法则
>
> **6.禁止全模糊或者左模糊**
>
> **7.表中允许适当冗余**



**索引失效的几种情况**

1. 不满足最左前缀法则
2. select *
3. 索引列有计算
4. 索引列使用了函数
5. 字段类型不同
6. 左模糊或者全模糊
7. 使用了or 关键字
8. <>|in|not in|not exist
9. order by 

**MYSQL查看操作日志**

可以看到general_log的状态是开启还是关闭,以及所属账号的general_log文件存放的目录。

二十、Linux

Linux学习笔记

Linux系统有哪些常用命令?
> top 快速查看哪些进程比较消耗CPU和内存资源
> free -m 查看操作系统剩余内存空间
> df -h 查看磁盘利用率
> ps -ef 查看进程
> tail -f 查看滚动日志
> head	......	查看文件头几行
> tail	......	查看文件后几行
>
> tail	-help	查看帮助
>
> kill -9  	强制杀死进程
>
> scp		运程克隆
>
> mkdir	创建文件夹
>
> touch	创建文件

二十一、Vue

1.vue有哪些指令

v-text
v-html
v-if
v-show
v-for
v-bind
v-model
v-on:click

2.v-show和v-if的区别

v-show 不满足条件会添加一个隐藏样式,

v-if 不满足条件会直接删除

3.父子组件如何传参

子组件操作父组件,通过事件绑定

父组件操作子组件,通过绑定属性

4.vue的生命周期

beforeCreate
created			创建
beforeMount
mounted			挂载
beforeUpdate
update			修改
beforeDestory
destroyed		销毁

5.路由传参的几种方式

路由通过设置 props:true,
再使用 this.$route.query.id来接收

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值