VS Code中的vim
概念Operator
d 删除
c 修改
y 复制
gc 注释,gu大小写
Motion :控制鼠标移动,选取文本对象
G,$,0,w,b,}等
[n]j,[n]gg,
iw,i(,it
learder key避免一些特殊功能命令与基础命令冲突。
surroud模式ys,cs,ds
sneak模式s/S 两个字符快速motion
dzPe:z表示使用sneak模式,删除遇到后面第一个字符“Pe”之前的内容
2yszPe”:底层执行的是ys2zPe”,遇到后面第二个字符“Pe”之前的内容,加上双引号。
实用操作
转到定义:gd,gh 查看函数说明
前进后退,Ctrl+i,Ctrl+o
重命名 f2
窗口切换Ctrl+数字,切换视图【+0打开侧边栏】
Ctrl+Tab,切换当前视图的文件
Alt+数字,切换当前视图的文件
vim 插入
I 在行首插入
A 在行尾插入
O 在行前插入(另起一行)
o 在行后插入(另起一行)
vim搜索(需配置f/F,s/S)需要在配置文件中开启使用 sneak:
单行内搜索
t+单个字符+回车 正向移动到下一个字符所在 ...
前端开发核心总结
标签的选择结构标签要语义化,不要都用div
布局方法:总体思路:
上下布局:块元素
左右布局:行内元素、行内块、浮动
万能布局:定位、转换
位置调整:margin、padding。【正负值】
用多个行内块实现了左右布局后,如果一个行内块的子元素需要上下布局,可以用块元素实现。
所以,不同布局方式有套娃效果。上下布局内部可以用左右布局,左右布局内部也可以用上下布局
1,用标准流做页面布局【页面的垂直布局】垂直方向对页面做划分,一个块元素占据一行,每行负责不同功能
2,用浮动块做行内盒子的布局每一行内,可以放置多个浮动块。
浮动块:
无法撑满未设置大小的标准流父元素高度,影响后面的标准流的块【覆盖】
【解决:设置父元素的高度,或者设置浮动消除】
3,定位实现更灵活的布局
边距、间隔设置
常用效果:
版心块居中:标准流,设置宽度,margin:auto
标准块的边距合并问题,通常比如通栏和版心的块与有边距,通过版心块设置上边距会有问题,需要用版心的标准块的padding设置边距
一个间隙效果,可能用margin、padding都能实现
怎么实现方便怎么做。
margin:块元素边界重 ...
JavaWeb_servlet使用与手撕MVC框架_04_Filter-Transaction-Listener
今日内容: 1. 过滤器Filter 2. 事务管理(TransactionManager、ThreadLocal、OpenSessionInViewFilter) 3. 监听器(Listener , ContextLoaderListener)
1 过滤器Filter
Filter也属于Servlet规范
Filter开发步骤:新建类实现Filter接口,然后实现其中的三个方法:init、doFilter、destroy配置Filter,可以用注解@WebFilter,也可以使用xml文件
Filter在配置时,和servlet一样,也可以配置通配符,例如 @WebFilter(“*.do”)表示拦截所有以.do结尾的请求
过滤器链1)执行的顺序依次是: A B C demo03 C2 B2 A22)如果采取的是注解的方式进行配置,那么过滤器链的拦截顺序是按照全类名的先后顺序排序的3)如果采取的是xml的方式进行配置,那么按照配置的先后顺序进行排序
2 编程式事务管理2.1 事务问题分析
事务默认自动提交,没法保证单个业务操作【包含多个dao ...
JavaWeb_servlet使用与手撕MVC框架_03_MVC与IOC
1 再次学习Servlet的初始化方法1.1 Servlet生命周期:实例化、初始化、服务、销毁1.2 组件配置:ServletConfig生效范围:当前组件可用
1.2.1 使用配置Servlet中的初始化方法有两个:init() , init(config)
其中带参数的方法代码如下:public void init(ServletConfig config) throws ServletException { this.config = config ; init(); } 另外一个无参的init方法如下: public void init() throws ServletException{ } 如果我们想要在Servlet初始化时做一些准备工作,那么我们可以重写init方法 我们可以通过如下步骤去获取初始化设置的数据
获取config对象:ServletConfig config = getServletConfig();
获取初始化参数值: config.getInitParameter(key);
1.2.2 添加配置在web. ...
JavaWeb_servlet使用与手撕MVC框架_02_手撕MVC
问题分析servlet规范与我们的业务无关,但现在Request、Response、视图渲染工具类、Redirect等等这些api“打扰”了程序员。
程序员的精力是很宝贵的,我们希望在开发项目时,程序员更专注于业务,而不要看到这些与业务无关的servlet规范api。
我们的目标就是,我们写的代码类就是普通的pojo类。这样的pojo类就是常用Web框架SpringMVC中创建的Controller类。
在使用SpringMVC前,我们在之前的代码基础上,实现一个简易版的SpringMVC框架,加深对框架底层原理和功能的理解。
1 利用switch语句-解决servlet类爆炸问题现在一个方法就定义一个servlet类,类数量过多,不好维护。
我们把Fruit相关的方法都放到一个servlet类中,该类中根据前端传的operate参数,调用对应的方法。
2 引入反射-解决switch判断语句过长问题通过反射来匹配前端operate参数和对应的处理方法
12345678910111213141516171819202122232425262728293031@Override ...
JavaWeb_servlet使用与手撕MVC框架_01_tomcat与servlet
学习说明你将学到:
如何用tomcat【servlet规范的实现者】搭建一个网站
如何用servlet开发动态资源,并部署到tomcat网站
分析用原生servlet开发的问题
一步步搭建一个MVC框架,屏蔽servlet对业务代码的侵入
1 CS与BS前置知识点:
Java / DB /JDBCHTML/CSS/JS
CS:客户端服务器架构模式,比如QQ,游戏LOL优点:充分利用客户端机器的资源,减轻服务器的负荷 (一部分安全要求不高的计算任务存储任务放在客户端执行,不需要把所有的计算和存储都在服务器端执行,从而能够减轻服务器的压力,也能够减轻网络负荷)
缺点:需要安装;升级维护成本较高【以前网速慢,升级打补丁可能需要工程师从上海带着U盘坐飞机到新疆】
BS:浏览器服务器架构模式优点:客户端不需要安装;维护成本较低缺点:所有的计算和存储任务都是放在服务器端的,服务器的负荷较重;在服务端计算完成之后把结果再传输给客户端,因此客户端和服务器端会进行非常频繁的数据通信,从而网络负荷较重
2 Tomcat入门2.1 认识Tomcatse ...
MySQL高级篇_02_索引及调优篇
MySQL高级篇_02_索引及调优篇第06章_索引的数据结构1. 为什么使用索引全表扫描与磁盘IO以图中表为例,如果Col 2 没有索引,我们查找 Col 2 = 89 这条记录,就要逐行去查找、去比较。如果表很大的话,有上千万条数据,数据分布在硬盘不同的位置上面,摆臂需要前后摆动查询数据,读就意味着要做很多很多次硬盘I/0才能找到。最耗时间就是磁盘I/O(涉及到磁盘的旋转时间(速度较快),磁头的寻道时间(速度慢、费时))
索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件是否命中某条索引,符合则通过索引查找相关数据,如果不符合则需要全表扫描,即需要一条一条地查找记录,直到找到与条件符合的记录。
索引的原理假如给Col2列建立索引,使用 二叉树 这样的数据结构,如下图所示
二叉搜索树的每个结点存储的是 (K, V) 结构,key 是 Col 2,value 是该 key 所在行的文件指针(地址)。比如:该二叉搜索树的根节 ...
MySQL高级篇_01_架构篇
第04章_逻辑架构1. 逻辑架构剖析1.1 服务器处理客户端请求首先MySQL是典型的C/S架构,即Clinet/Server 架构,服务端程序使用的mysqld。
不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果是:客户端进程向服务器进程发送一段文本(SQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。
那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?这里以查询请求为 例展示:
下面具体展开如下:
1.2 ConnectorsConnectors, 指的是不同语言中与SQL的交互。MySQL首先是一个网络程序,在TCP之上定义了自己的应用层协议。所以要使用MySQL,我们可以编写代码,跟MySQL Server 建立TCP连接,之后按照其定义好的协议进行交互。或者比较方便的方法是调用SDK,比如Native C API、JDBC、PHP等各语言的MySQL Connecotr,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互
接下来的MySQL Se ...
Redis入门到实战_06_原理篇
Redis原理篇1、原理篇-数据结构与数据类型底层数据结构数据结构和数据类型是两个概念。
数据类型可以看作是Redis暴露给客户端的,用户可见的的API。
数据结构是Redis服务端底层组织存储数据的真正方式。
我们常见的Redis数据类型有String,List,Set,ZSet等,然而对于每一种数据类型,Redis服务端底层对应着多种数据结构。Redis综合节省空间,处理性能等方面的考虑,根据当前数据的特点【规模,元素大小等】,Redis会灵活的使用不同的数据结构来存储数据。
动态字符串我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。
不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:
获取字符串长度的需要通过运算【最后结束字符是\0,需要运算,通过数组长度-1】
非二进制安全 【最后结束字符是\0,如果字符串需要保存\0,会有数据安全问题】
不可修改 【字面量在常量池中,不支持修改和扩容】
Redis构建了一种新的字符串结构,称为简单动态字符串(Simple Dyna ...
Redis入门到实战_05_高级篇-最佳实践
Redis高级篇之最佳实践今日内容
Redis键值设计
批处理优化
服务端优化
集群最佳实践
1、Redis键值设计1.1、优雅的key结构Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:
遵循基本格式:[业务名称]:[数据名]:[id]
长度不超过44字节
不包含特殊字符
例如:我们的登录业务,保存用户信息,其key可以设计成如下格式:
这样设计的好处:
可读性强
避免key冲突
方便管理
更节省内存: key是string类型,底层编码包含int、embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小。当字节数大于44字节时,会转为raw模式存储,在raw模式下,内存空间不是连续的,而是采用一个指针指向了另外一段内存空间,在这段空间里存储SDS内容,这样空间不连续,访问的时候性能也就会收到影响,还有可能产生内存碎片
1.2、拒绝BigKeyBigKey通常以Key的大小和Key中成员的数量来综合判定,例如:
Key本身的数据量过大:一个String类型的Key,它的值为5 MB
Key中的成员数过多:一个Z ...
