jquery面试复习

1.$(document).ready();与window.onload有什么区别:

a)ready:DOM 结构绘制完毕后就执行,不必等到加载完毕
b)onload:除了要等待 DOM 被创建还要等到包括大型图片、音频、视频在内的所有外部资源都完全加载

2.$(this) 和 this 关键字在 jQuery 中有何不同?

这其实是jquery对象和js对象的区别,jquery对象是把元素封装成一个数组形式,而js对象还是dom元素.

3.jquery方法链:

“可以在一个方法后使用’.’调用另一个方法,本质上是每个函数末尾加了return this,将调用该函数的jquery对象返回。 ”

4.哪种方式更高效:document.getElementbyId(“myId”) 还是 $(“#myId”)?

 第一种,因为它直接调用了 JavaScript 引擎

5.jquery ajax的几种方式:

a)get/post
b)load
c)ajax()

6.常用遍历的方法:

parent/child,find,first,last,prev,eq/each

7.jsonp实现:

dataType : "jsonp",//数据类型为jsonp  
jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数  

8.jquery的核心是什么:

选择器,事件,ajax

sqlserver基础复习

1.聚集索引,填充因子:表示索引的填满程度,数据更新越多,索引建立的次数和空间要的越多,所以要留空的越多,相应的填充因子的填满程序要越小,为了留出更多的空间.

2.sqlserver性能优化的建议:

a)首先查看是否有死锁!!!

b)sql优化:使用分析工具,定位到耗时比较多sql,进一步优化sql;优化sql编写:比如select(*),like,in/not in等;视图或存储过程的建立(严格来说按设计原则尽量减少数据库逻辑的实现,尽量把逻辑放在代码层,存储过程多作为一些工具,比如通用分页存储过程)

c)表结构优化:建立/重建索引,选择合适的填充因子;垂直分库分表(把表字段分割到多个表中);水平分表(两种方式:1分区,把数据水平切割到几个一样结构中的子表中 ;2删除.或者直接冷备份处理只保留一定时间段的数据)

d)硬件升级:升级更高配置的硬件;加更多的服务器实现主从读写分离

f)当以上也不能解决时,考虑数据库集群和分布式/微服务架构实现

3.存储过程使用临时表代替游标

create proc demo_proc
@userid int,
@username varchar(20)
as
declare @id int
declare @name varchar(20)
declare @i int
begin
 create table #temp(  --建立临时表
    id int,
    username varchar(20),
    sortid int
 )
 insert into #temp select demo_id,demo_desc,row_number() over(ORDER BY demo_id)  from demotable; --临时表插入数据和一个自增字段
 set @i=0
 while @i<10
 begin
  select @id=id,@name=username from #temp where sortid=@i+1;
  set @i=@i+1
  print @id
  print @name
end
drop table #temp
end

4.分页

SQL语句分页
select top 10 * --使用子查询的结果查询前10行
from
(select *,ROW_NUMBER() over(order by demo_id) as rownum from demotable) as a --给原表查询结果增加自增字段
where rownum>20;
存储过程分页--事务和错误处理
create proc proc_page
@tablename varchar(50),
@pagesize int,
@curpage int 
as
declare @sql nvarchar(200)  --自建sql需要使用nvarchar
declare @tranError int
begin
    begin tran tran_page    --开始事务
    begin try    --开始异常
        set @tranError=0
        set @sql='
        select top ('+Convert(varchar,@pagesize)+') *
        from
        (select *,ROW_NUMBER() over(order by demo_id) as rownum from '+@tablename+') as a
        where rownum>'+Convert(varchar,@pagesize)+'*('+Convert(varchar,@curpage-1)+');' 
        exec SP_EXECUTESQL  @sql --执行分页sql
    end try   --结束异常
    begin catch  --开始处理异常
         set @tranError=@tranError+1
    end catch
    if(@tranError>0)  --判断是否有异常
    begin
        rollback tran tran_page  --回滚事务
    end
else 
    commit tran tran_page;   --提交事务
end

5.建分表,索引,视图

6.case when then else end用法.

“`
select *,case
when demo_id=1 then '1111' –多条件
when demo_id=2 then '2222'
when demo_id=3 then '3333'
else 'no' end
from demotable;

“`

7.主从

微信截图_20200331210654
a)发布订阅:https://blog.csdn.net/weixin_42799222/article/details/86579010

mysql基础复习

1.数据库:存放数据的仓库,按照数据结构来组织、存储和管理数据的仓库

a)关系型数据库,存储的格式可以直观地反映实体间的关系的数据存储系统。

b)非关系型数据库:not only sql,非关系型的、不保证遵循ACID原则的数据存储系统。(ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。)

c)在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。

2.SQL:结构化查询语言(Structured Query Language)简称SQL,常见4种分类:DMCQ

a)数据定义语言(DDL:Data Definition Language):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等.
适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.

b)数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。

c)数据控制语言(DCL:Data Control Language):常用操作是授权。它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。

d)数据查询语言(DQL:Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。

3.数据库库的操作

a)常用动作:create,show,use,select,drop
b)create,创建数据库:
create database test1 charater set 'utf8' collate 'utf8-general-ci';
//后面的参数可以省略用默认的

c)show,查看数据库信息:
show databases;//查看所有的数据库;
show creaate database test1;//查看数据库创建时的语句

d)use,使用数据库:use test1;
e)select,查看数据库版本:
select version();//查看当前数据库版本
select database();//查看当前use使用的数据库

f)drop,删除数据库:drop database test1;

4.表的操作

a)常用动作:create,show/desc,alter,drop,rename
b)create,创建语法:
create table 表名(
字段名 类型(长度) 约束
);
create table user(
id int primary key not null
);//最后一个字段不用逗号

c)show/desc,查看创建语句:
show create table user;
desc user;

d)alter,修改表信息,操作有:add,modify,drop,change
alter table 表名 操作 [column|constraint] ...;//默认不写是修改字段:column
alter table user add username varchar(20) unique; //添加一列,//最后添加after/before 字段名,可调整插入字段的顺序。
alter table user modify name varchar(50) unique;//修改字段的类型为varchar(50)
alter table user drop iamge;
alter table user change username name varchar(50) unique; //修改字段名
rename table user to users;//修改表名

5.DML操作:insert,update,delete

a)insert,插入,有3种方式
insert into 表名 values(所有字段的值); //用于插入所有的字段
insert into 表名(字段名) value(对应字段的值);//插入指定的值
insert into 表名 select ...//使用查询的结果作为表的插入
如:insert into users(id,name) select id,name from users_old;

b)update,修改
update 表名 set 字段='' where 条件
c)delete,删除
##### 注意:与truncate区别,delete是纯粹一行一行删除数据,而truncate是删除旧表建新表,会重置自增标记,所以truncate是DDL!!!
delete from 表名 where 条件
delete from user where id=1

6.DQL:查询语句

常用关键字:select,where,group by , order by,having
a)select 查询开始
b)where 约束条件,在
c)group by 分组,常与聚合函数(SUM, COUNT, MAX, AVG等)配合
d)order by 排序
e)having 过滤条件,对已经返回的结果筛选,并可以使用聚合函数

7.where与having区别:

a)位置:如有group by,where在groupby 之前;having在之后
b)作用范围:where在结果返回之前起作用;having是在查询返回结果集以后,对查询结果进行的过滤操作,也就是对group by 后的数据作过滤。
select product,sum(price) as sumprice from orders
where
price>90 //结果返回之前,对要查询的数据有约束,行数据中price大于90的才被查询出来
group by product
having sum(price)>100;//结果返回之后,再作过滤,分组查询后统计结果中总价大于100的留下来。

c)使用聚合函数:where不能使用,而having可以使用聚合函数

8.聚合函数:SUM, COUNT, MAX, AVG等

9.约束Constraint:规定表中数据的规则。6种常见约束

“`
a)not null,不为空约束
b)unique ,唯一约束,一个表可以有多个字段组成,也可能有多个unique约束
c)primary key :主键约束,一个表只能有一个,相当于not null和unique合并。后面常用auto_increment; insert into orders values(null,'电视','900');//当使用auto_increment时用nul代替自动增长。
d)default,默认值约束
e)check,用于限制列中的值的范围
f)foreign,一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。虽然能保证数据的完整性,但影响性能和增加数据库复杂度,强烈建议不使用,而是把逻辑放在代码层。

****独立使用sql创建约束,请自行查阅****

“`

10.表设计

a)数据库三范式
1.字段的原子性:字段表示的值不能再有其他类型
2.主键的唯一性:表要有主键,其他字段都依赖于表中唯一的主键。
3.消除传递依赖:要求一个数据库表中不包含已在其它表中已包含的非主键字段(可以有一个其他表的主键)
4.不一定要严格按照三范式建表,为了需求和性能,可以适当放松,比如字段冗余
b)表结构关系
1.一对一:表的垂直切分,常用于表中的字段较多或者表中字段有分为常用和不常用,如用户登录信息表与用户详细信息表
2.一对多:不用建关系表,直接在表中增加另一张表的主键
3.多对多:一般需要建中间关系表来存放关系。
c)多表查询
1.内连接:范围是交集,join on;
2.左外连接:只要左边表中有记录,数据就能检索出来,而右边有的记录必须在左边表中有的记录才能被检索出来。 范围是左集的所有和与右集交叉的集合,假如没有右集,左集一样有但右集为null
3.右外连接:与左链接相反.范围是右集的所有和与左集交叉的集合,假如没有左集,右集一样有但左集为null

### 11.子查询:一个查询的结果是另一个查询的条件
### 12.索引:排好序的数据结构,用来提高查询速度.教程
a)索引的数据结构有四种:二叉树,红黑树(平衡二叉树),B树,Hash
b)mysql索引的常用存储类型/数据结构有两种:B+TREE、HASH
c)索引的类型:单列索引、唯一索引、主键索引和聚集索引
d)聚集索引:索引与叶子中的数据保存在同一个文件中,如主键索引,所以比较快.聚集索引一个表只有一个,聚集索引存储记录逻辑顺序与物理相同,且是物理上连续存在,非聚集索引是逻辑上的连续。
e)非聚集索引:索引与数据保存在不同文件中,索引中的叶子保存的是真实数据的地址,而不是数据本身.

git基础复习

1.git:分布式版本管理工具

a)与svn的区别:中心化版本管理工具
b)git文件的三个区域和三种状态:工作区(modified/untracked),暂存区(staged),对象区(本地仓库区commited)
微信截图_20200326010944
c)三种状态变化撤消操作:

2.常用操作:

git init 
git config 
git add <file>
git commit 
git push
git pull
git clone
git remote 
git status
git rm
git log 
git diff
git reset
git branch
git checkout
git merge

3.使用本地库初始化常见使用流程

4.使用远程库克隆常见使用流程

5.git init:在当前目录初始化一个本地仓库

```
mkdir git-test  //创建本地目录
cd git-test    
git init 
```

6.git config:添加仓库的配置文件,通常配置操作者名称和邮箱,有三种级别

git config --local user.name 'tang'    //本地项目变量,当前.git/config下的配置,优先级最高
git config --local user.email '123@qq.com'

git config --global    //用户变量,当前登录用户,在~/.gitconfig下,优先级次之
git config --system    //系统变量,当前系统级别,在 /etc/gitconfig下,级别最低

7.git add:添加文件进入缓存区。其中注意的:git add .与git add -A区别;

a)文件差异:"."监控新增和修改的文件,"-A"监控所有文件包括新增,修改,删除的文件。另:"-u"监控修改和删除的文件
b)目录差异:"."监控当前目录及子目录的文件,"-A"不管当前在哪个目录,会监控整个仓库的文件。

8.git commit:把缓存区的文件提交到本地仓库,会生成分布式ID用来区分提交

git commit -m 'log...'
git commit --amend -m '修正log...' //修正上一次提交的日志

9.git status:查看当前仓库的状态,经常用,能及时了解仓库各文件的状态

10.git log:查看commit的日志

a)查看最后的几次:git log -2 //最后两次
b)commit xxxx:这是用分布式ID生成器,用来区分各自的提交

11.git diff:对比更改

a)git diff –name-only:列出所有更改的文件名称
b)git diff file_name:查看文件中更改的内容

12.git branch:查看/创建分支

git branch dev //创建分支
git checkout dev
touch dev.txt
git commit -am 'dev.txt'
git push origin dev  //把本地分支推送到远程仓库中,如果不需要不用这步
git checkout master  //切回master分支 
git branch //查看当前分支
git merge dev   //把dev分支合并到当前所在的master分支
git branch -d dev //如果临时分支不需要,可删除

13.git reset :撤销更改,在add后的撤销操作都用这个来解决,只是选项的不同

a)–mixed默认,用在staged回退且不删除更改
b)–soft,用在commit本地仓库回退时,也不删除更改,并能一步步回退
c)–hard,用在commit本地仓库回退时,直接删除更改,回到旧版本。
d)具体操作请看后面19的撤销操作

14.git checkout:切换分支或者撤消工作区更改

a)切换分支:git checkout dev
b)把修改的文件撤消回修改之前:git checkout index.php

15.git的https和ssh两种通讯方式

16.常见的关键字origin,其实是默认的远程仓库在本地的别名,可以自定义为其他名字。

17.常见关键字HEAD:指向当前工作区版本的指针

a)查看当前所在的版本:git log //默认最上面一个即是当前工作区的版本号
b)所以切换分支非常快,只是修改HEAD指针的指向
b)通过修改指针可以撤消操作:git reset –mixed HEAD,常用于暂存区回退当前版本到工作区

18.忽略文件:

touch .gitignore

19.撤销更改,参考:https://www.jianshu.com/p/c2ec5f06cf1a

a)处于工作区域的更改也就是刚修改的:git checkout <file> //如果用点表示所有,回退到修改前
b)处于暂存区域的也就是add:git reset --mixed HEAD <file> //不填写file,表示所有文件,回退到工作区,这里也说明在暂存区其实已经进入version版本管理了
c)处于本地仓库区域的也就是commit:git reset --soft <commit_id>//退到指定版本,本地的修改及提交日志会不会被删除,如果再要回退,走上面两步;而–hard会删除回到上一版本commit状态会放弃目前本地的所有改变
d)已经处于pushed的:建议使用git reset --hard <commit_id>拿到指定版本代码,删除.git重新初始化提交

算法基础复习

1.数据结构:带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系。

a)数据的逻辑结构(常见4种):反映数据元素前后间关系的数据结构,而与他们在计算机中的存储位置无关
包括:集合,线性结构,树型结构,图型结构

集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系; 
线性结构:数据结构中的元素存在一对一的相互关系; 
树形结构:数据结构中的元素存在一对多的相互关系; 
图形结构:数据结构中的元素存在多对多的相互关系。 

b)数据的物理结构(存储结构,常见4种):指数据的逻辑结构在计算机存储空间的存放形式
c)按照数据的逻辑结构对其进行简单的分类,包括线性结构和非线性结构两类
常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等
d)注意:一维数组是线性结构,而二/多维数组不是线性结构
f)常用的数据结构:数组,栈,队列,链表,树,图,堆,散列(Hash)

2.算法:解决问题的方法

a)算法往往是针对数据结构的
b)算法的优劣主要从时间复杂度和空间复杂度来考虑
c)时间复杂度:时间针对问题(数据)规模的变化而变化的规律.表示法:O(fx),读Big O,会忽略常数项和低次项。如访问单个元素:数组是的O(1),单链表是O(n).

3.常见排序

微信截图_20200324000119
微信截图_20200323234741
微信截图_20200323235418
记忆法:
选泡插,
快归堆希统计基,
恩方恩老恩一三,
对恩加K恩乘K,
不稳稳稳不稳稳,
不稳不稳稳稳稳

4.如何写算法

a)由简单到复杂
b)由局部到整体
c)由精糙到精细
变更更名,语句合并,边界处理

5.选择排序:现实中人的常见思维,比如按低到高排队,但在程序中不常用,因为复杂度为N^2还不稳。

1.递归:主要是要找到公式和递归的停止点
2.双向冒泡(鸡尾酒):比较次数为原长度的一半,并且两头比较
3.冒泡:
4.约瑟夫环: