当前位置:网站首页 > R语言数据分析 > 正文

lvcreate删除(lvcreate命令详解)



答:都是对表删除的命令。删除狠毒程度,drop>truncate>delete。
delete是可以使用where子句删除某特定行的数据也可以删除整表也可以使用where子句删除某特定行的数据,删除命令需要加from(delete from table A),但不是真正的删除,而是标记删除,可以使用回滚恢复删除数据。trunctae只能删除整表数据(不能删除某一行),直接truncate table A就可以,和delete删除表作用是一样的(但是效率快很多,但是不能靠回滚恢复数据),删除数据,释放空间,不删除定义;而drop删除表的话,那就是连数据内容和定义都删除,释放空间,使用命令drop table A删除表A。

第一范式(确保每列保持原子性):这最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
比如学生表中的地址,原本可能就是数据表中一列,但是如果经常要访问城市,那可以细拆分为省份城市啥的。
第二范式: 在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
比如把学生表和课程表分开,中间加一个学生id和课程id的关联表,而不是将之保存在一个表中
第三范式:*需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。



ACID:
原子性(事物中的sql要么全执行成功,要么不执行。靠undo log)
一致性(事物改变前后数据保持一致)
隔离性(事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰)
持久性(事物一旦提交,不能回滚,靠redo log)



DBS包含DBMS和DB。
在这里插入图片描述

mysql8.0中有相关的内置函数,而且考虑了各种排名问题:

row_number(): 同薪不同名,相当于行号,例如3000、2000、2000、1000排名后为1、2、3、4
rank(): 同薪同名,有跳级,例如3000、2000、2000、1000排名后为1、2、2、4
dense_rank(): 同薪同名,无跳级,例如3000、2000、2000、1000排名后为1、2、2、3
ntile(): 分桶排名,即首先按桶的个数分出第一二三桶,然后各桶内从1排名,实际不是很常用


另外这三个函数必须要要与其搭档over()配套使用,over()中的参数常见的有两个,分别是

 
  

在这里插入图片描述

from——>on——>join——>where——>group by——>agg_fun——>with——>having——>select——>distinct——>order by——>limit

LAG()函数是一个窗口函数,允许您回顾多行并从当前行访问行的数据。

 
  

LEAD()函数是一个窗口函数,允许您向前看多行并从当前行访问行的数据。

 
  

在这里插入图片描述
在这里插入图片描述

  1. 类型
    1、普通索引;2、唯一索引;3、主键索引;4、组合索引;5、全文索引
 
  

唯一索引(索引列任意两值不相等)
主键索引(唯一索引基础上索引列不为空值,一个表只能有一个)和聚集索引(指示表中数据行按索引键的排序次序存储
聚集索引对查找行很有效。只有当表包含聚集索引时,表内的数据行才按索引列的值在磁盘上进行物理上排序和存储。每一个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。)。
2) 索引优缺点
① 优点:查找速度变快
② 缺点:需要额外物理空间维护,数据更新时索引也要更新维护,降低效率
3) 哪些列适合加索引
经常被作为查询条件的列(where后面或者select后面),
4) 实现方式
①B+树








1、最佳左前缀不匹配
2、在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
3、存储引擎不能使用索引中范围条件右边的列
4、尽量使用覆盖索引(只访问索引的查询(索引列和查询列一直)),减少select *
5、mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
6、is null, is not null也无法使用索引
7、like以通配符开头(‘%abc…’)mysql索引失效会变成全表扫描的操作
8、字符串不加单引号索引失效
9、少用or,用它来连接时索引会失效







DDL: 数据定义语言,用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:

 
  

DDL操作是隐性提交的!不能rollback
DML:数据操纵语言,插入:INSERT; 更新:UPDATE;删除:DELETE
DCL:数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如:

 
  

DQL:数据查询语言,基本结构是由SELECT子句,FROM子句,WHERE

共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据、


乐观锁:乐观锁不是数据库自带的,需要我们自己去实现。乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。

悲观锁:与乐观锁相对应的就是悲观锁了。悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次操作时都要通过获取锁才能进行对相同数据的操作,这点跟java中的synchronized很相似,所以悲观锁需要耗费较多的时间。另外与乐观锁相对应的,悲观锁是由数据库自己实现了的,要用的时候,我们直接调用数据库的相关语句就可以了。
共享锁和排他锁都是悲观锁的一种。

TCP是传输层协议,HTTP是应用层协议。 http是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的。

TCP UDP 可靠、按序、面向连接(字节流) 不可靠、不连续、无连接、关于何时发送,发送什么数据的应用程序控制更精细,首部开销小 拥塞控制:控制流量防止转发节点缓存被淹没 延迟小、按需快速传输、不考虑拥塞控制 流量控制:防止发送方发太快,淹没接收方的缓存 无

菜鸟教程状态码

首先进行域名解析:将字母转为ip地址(递归和迭代)
然后建立TCP连接
传输数据
关闭连接
解析传输数据



在这里插入图片描述在这里插入图片描述

  1. 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
  2. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如线程ID、程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
  3. 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
  4. 可以从调度、并发性、拥有资源、系统开销等方面说不同
    在这里插入图片描述

在这里插入图片描述

互斥(资源不能同时给两个人)、资源不可抢占(得到不放手)、请求和保持(不仅不放手还想要新的)、循环等待(你等我先放,我还等别人先放,形成环)

1、sleep是线程中的方法,会让当前线程睡眠一段时间,让出cpu资源进入阻塞状态,但是wait是Object中的方法。
2、sleep方法不会释放lock,但是wait会释放,而且会加入到等待队列中。
3、sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字。
4、sleep不需要被唤醒(休眠之后推出阻塞),但是wait需要(不指定时间需要被别人中断)。
5、yield是表示当前线程愿意放弃手中的cpu资源,转而去做其他事情,让同等优先级或更高优先级的其他线程被调度运行,sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行机会;执行yield()方法后转入就绪(ready)状态;
6、sleep()方法声明抛出InterruptedException()(当阻塞方法收到中断请求的时候就会抛出该异常),而yield()方法没有声明任何异常;




简单的讲,数据倾斜就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。 以Spark和Hive的使用场景为例。他们在做数据运算的时候会设计到,countdistinct、group by、join等操作,这些都会触发Shuffle动作,一旦触发,所有相同key的值就会拉到一个或几个节点上,就容易发生单点问题。

解决数据倾斜有这几个思路:

  1. 业务逻辑,我们从业务逻辑的层面上来优化数据倾斜,比如实现将大量可能会被shuffle到同一个机器的数据进行预处理
    ① 有损的方法:找到异常数据,比如ip为0的数据,过滤掉
    ② 无损的方法:对分布不均匀的数据,单独计算
    ③ 数据预处理


  2. 程序层面,比如说在Hive中,经常遇到count(distinct)操作,这样会导致最终只有一个reduce,我们可以先group 再在外面包一层count,就可以了。
  3. 调参方面,Hadoop和Spark都自带了很多的参数和机制来调节数据倾斜,合理利用它们就能解决大部分问题。
    在这里插入图片描述

在这里插入图片描述

RDD是弹性分布式数据集,是spark中计算和数据的抽象,他标识已经分区、不可变并能够被并行计算的苏剧集合,有多个partition组成,一个partition对应一个task。失败自动重构。
窄依赖:父RDD和子RDD partition之间的关系是一对一的,或者父RDD一个partition只对应一个子RDD的partition情况下的父RDD和子RDD partition关系是多对一的,不会有shuffle产生。父RDD的一个分区去到了子RDD的一个分区
宽依赖:父RDD与子RDD partition之间的关系是一对多,会有shuffle的产生。父RDD的一个分区的数据去到了子RDD的不同分区里面。
在这里插入图片描述


都要经过shuffle的,groupByKey在方法shuffle之前不会合并就是原样进行shuffle,。reduceByKey进行shuffle之前会先做合并,这样就减少了shuffle的io传送,所以效率高一点。

kafka怎么保证数据消费一次且仅消费一次?

同:RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利。都是惰性执行;都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出;都有partition的概念。
异:RDD一般和spark mlib同时使用,dataframe和dataset一般和sparkml同时使用,RDD不支持sparksql操作,DataFrame与Dataset均支持sparksql的操作;DataFrame和Dataset均可使用模式匹配获取各个字段的值和类型;DataFrame每一行的类型固定为Row(与DataSet的区别在此,DataSet每一行数据类型可以有很多,DF必为Row,DF是特殊的DS:Dataset[Row],),只有通过解析才能获取各个字段的值,每一列的值没法直接访问;DataFrame与Dataset支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列的字段名一目了然
RDD、DF、DS、区别

延迟:Storm处理的是每次传入的一个事件,而Spark Streaming是处理某个时间段窗口内的事件流。因此,Storm处理一个事件可以达到亚秒级的延迟,而Spark Streaming则有秒级的延迟。
容错:sparkstreaming容错性更好,保证每条记录仅被处理一次
集群运行:两个系统都运行在它们自己的集群上,其次,Storm能运行在Mesos,而Spark Streaming能运行在YARN 和 Mesos上。

java面向对象
scala集成面向对象编程和函数式编程的各种特性,速度快(Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多)。
scala不支持接口interface,采用trait

在这里插入图片描述12. Hbase、Hive和MySQL区别和联系

Hbase MySQL 类型 按列存储数据库 关系型数据库 优点 对海量数据进行增删查很有用;列可以动态增加,并且列为空就不存储数据,节省空间;支持高并发读写操作 表表之间、表和字段、数据之间有联系,增删改查比较方便;有事物操作,保证数据完整性和一致性 缺点 不支持条件查询,只能按rowkey查询;有很多冗余数据来避免join查找,读快,写不快(有副本复制的问题) 为了保证关系,底层运行大量 算法,降低效率;面对海量数据的增删改查无力 数据类型 简单字符类型 char、int、varchar、date等等 可扩展 可以轻松增加或者减少 硬件的数量,对错误兼容性比较高 如果要扩展,需要增加中间层

在这里插入图片描述在这里插入图片描述

将待求解的问题分解成若干个子问题,先求解子问题,然后从这若干个子问题的解中得到原问题的解。有些子问题或许被重复计算多次,在动态规划中,会保存每个被计算过子问题的解,将其填入表中。

动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题,自顶向下求解子问题,合并子问题的解,从而得到原问题的解。动态规划也是把原始问题分解为若干个子问题,然后自底向上,先求解最小的子问题,把结果存在表格中,在求解大的子问题时,直接从表格中查询小的子问题的解,避免重复计算,从而提高算法效率。
4. 旅行商问题

不是,除了vector和hashtable,java集合中其它集合类型都是线程不安全的

都继承自Throwable类
ERROR一般是表示系统错误或低层资源的错误,比如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等,是不可控的、程序员是不能改变的和处理的,是在程序编译时出现的错误
1. java.lang.OutOfMemoryError:内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
2. java.lang.StackOverflowError:堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。


EXCEPTION一般是程序出了问题,这种问题可以被捕获和识别的问题(受检查,还有不受检查类型),抛出异常应该在应用程序级被处理。
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。

HashMap不是线程安全的,所以在处理并发的时候会出现问题。
而HashTable虽然是线程安全的,但是是通过整个来加锁的方式,当一个线程在写操作的时候,另外的线程则不能进行读写。
而ConcurrentHashMap则可以支持并发的读写。跟1.7版本相比,1.8版本又有了很大的变化,已经抛弃了Segment的概念,虽然源码里面还保留了,也只是为了兼容性的考虑。
读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小(锁分段),不用对整个ConcurrentHashMap加锁。


  1. final、finally、finalize区别?
  2. 黑盒白盒测试?
  3. 设计模式:单例、工厂

https://www.cnblogs.com/snowwhite/p/9532311.html
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象,如下图所示:
在这里插入图片描述

接口是一种特殊的抽象类,实现接口用implements,继承抽象类用extends。一个类只能继承一个抽象类可以实现多个接口
接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
抽象类里可以没有抽象方法
如果一个类里有抽象方法,那么这个类只能是抽象类
抽象方法要被实现,所以不能是静态的,也不能是私有的。
接口可继承接口,并可多继承接口,但类只能单根继承。






1、自反性:对于任何非空引用x,x.equals(x)应该返回true。
2、对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。
3、传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。
4、一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。
5、非空性:对于任意非空引用x,x.equals(null)应该返回false。
重写 equals 的时候必须重写 hashCode
hashcode是是一个对象的哈希码,是有Object类的本地方法生成的,确保每个对象有一个哈希码。
生成策略
String 类的 hashCode 根据其字符串内容,使用算法计算后返回哈希码。
Integer 类返回的哈希码为其包含的整数数值。
Object 类的 hashCode 返回对象的内存地址经过处理后的数值。









wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。它是Object类的方法,该方法用来将当前线程置入预执行队列中,并且在wait所在的代码行处停止执行,直到接到通知或被中断为止。
在调用wait方法之前,线程必须获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait方法。
notify()同wait方法一样,也需要在同步方法或同步块中调用,即在调用前,线程也必须获得该对象的对象级别锁。
wait() 需要被try catch包围,以便发生异常中断也可以使wait等待的线程唤醒。
notify 和wait 的顺序不能错,如果A线程先执行notify方法,B线程在执行wait方法,那么B线程是无法被唤醒的。
在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。线程在运行的时候,如果发现某些条件没有被满足,可以调用wait方法暂停自己的执行,并且放弃已经获得的锁,然后进入等待状态。当该线程被其他线程唤醒并获得锁后,可以沿着之前暂停的地方继续向后执行,而不是再次从同步代码块开始的地方开始执行。但是需要注意的一点是,对线程等待的条件的判断要使用while而不是if来进行判断。这样在线程被唤醒后,会再次判断条件是否正真满足。




t.join()方法阻塞调用此方法的线程(calling thread),直到线程t完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程。

数组查询快(内存中存储连续按索引查),增删慢(增将后面往后挪,删将后面往前移);链表查询慢(存储不连续,前知后,要遍历),增删快(更改个别节点的后继罢了(单链表是这样,双链表后继也改))
使用方面,数组实例化需要指定数组大小,链表不用;
内存利用率:数组低,链表高

  1. servlet生命周期

    Servlet 初始化后调用 init () 方法。
    Servlet 运行调用 service() 方法来处理客户端的请求。
    Servlet 销毁前调用 destroy() 方法。
    最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。


到此这篇lvcreate删除(lvcreate命令详解)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ore怎么读?(chore怎么读)2025-05-26 10:00:05
  • redhat报名(redhat官方授权培训机构)2025-05-26 10:00:05
  • ip15promax屏幕尺寸(苹果15pro尺寸)2025-05-26 10:00:05
  • ceteal怎么读的(cetera怎么读)2025-05-26 10:00:05
  • raise a suilen专辑(rise and fall是谁唱的)2025-05-26 10:00:05
  • webflux和springmvc的区别(springwebflux和springmvc)2025-05-26 10:00:05
  • mousetale下载(mouse server安卓下载)2025-05-26 10:00:05
  • swagger 实体类注解(swagger实体类注解)2025-05-26 10:00:05
  • to 翻译成中文(touch the ground翻译成中文)2025-05-26 10:00:05
  • 如何解决no such file or directory(如何解决no such file或 directory 错误)2025-05-26 10:00:05
  • 全屏图片