全栈练习笔记
2021-05-04 13:15:32 0 举报
AI智能生成
全栈练习
作者其他创作
大纲/内容
Idea
快捷键
ctrl+方向键
单词跳过移动光标
ctrl+alt+方向键
回到上次浏览位置
alt+方向键
左右窗口切换
ctrl+alt+空格
new后提示对象
crtl+z
返回上一步操作
crtl+shift+z
对应crtl+z的撤销,下一步
ctrl+d
复制光标所在行到下一行
crtl+y
删除光标所在行
crtl+f
当前窗口查找
ctrl+r
当前窗口字符替换
双击shift
当前项目查找文件或插件等
ctrl+shift+f
当前项目全局查找
ctrl+shift+r
当前项目字符替换
ctrl+shift+f10
运行当前方法,常用再单元测试
按住tab
整块代码右移
tab+shift
整块代码左移
ctrl+alt+o
清除没有引用的包
前端
three.js
html5
jsp
后台参数显示
后台直接传递map给前台时,map里面使用等于号连接的,不能被一些方法识别,应该从后台传递一个json对象。${json}.key.key[].key这样的方式,不能${json.key}这样
Uncaught ReferenceError: is not defined
分支主题
要加上引号
这里的${}形式有点问题啊?
json
JS将对象以JSON格式输出的两种方法
alert(JSON.stringify(data));
说明1
//创建var data={ key1:\"value1\
看看有没有这个键
对象.hasOwnProperty(prop)
ajax上,获取json第一层key有多少个
Object.keys(json).length
js中给json赋值
获取json中key值
获取json的长度
function getJsonLength(jsonData) { var length; for(var ever in jsonData) { length++; } return length; }
这个不能用,用后面这个
Object.keys(myObject).length
处理开头有0的数字
假设后台传递的loginName为“01”
var data = ${data};var loginName = data.loginName;
得到01
var loginName = ${data.loginName}
得到1
删除json的某一直
delete data.loginName;
delete data[0].XXX
遍历,根据key获取指定value值
var obj = {\"id\
ajax
接受后台传递的map,得到长度
Object.keys(data).length
存在跨域问题
javascript
在html中的位置
之前
引用
内嵌
注释
单行
//
这是html的标签
多行
/* */
数组
var arr = Array(4);
定义了一个数组的长度。
var arr = Array();或则不定义长度,因为javascript的数组相当于java里面的集合。
var arr = Array(“”,“”,“”);
直接定义元素,用逗号隔开
var arr = [\"\
简写法
var arr=[];
arr[index] = x;
通过索引赋值
arr[0][0]
数组里面有数组的引用方法
关联数组
相当于把索引值变成了key,这种做法不好,可以用对象和map代替。
对象
创建对象及其属性
var lennon = {};
对象里面有对象
通过lennon.person.name的方式访问属性;
几种创建方式,以及怎么创建方法,百度一下。
几种对象
自定义对象
内建对象
宿主对象
函数与方法
函数是定义在全局的
方法是对象内部的函数。
可以有返回值,可以参数
使用“==”或则“!=”有可能会有类型转换的问题,应该使用“===”或则“!==”避免没有注意到的类型转换问题
比较carAimType == 0可能导致意外类型强制减少...(Ctrl + F1)此检查报告了JavaScript相等运算符的使用,这可能导致意外的类型强制。 使用类型安全的相等运算符===和!==而不是它们的常规对应物==和!=被认为是一种好习惯。根据所选的选项,这将突出显示:==和!=运算符的所有用法。除了与null比较之外的所有用法。 某些代码样式允许使用x == null作为x === null ||的替代 x === undefined。只有可疑的表达式,例如:==或!=与0,'',null,true,false或undefined的比较。
向表格中插入值,$(\"#th123\").html(\"插入的内容\");
不用innerHtml()
字符串的单双引号
内双外单,内单外双,内外相同用/转义
在拼接html语句时,应该用‘’单引号,而不是“”双引号
内有带参方法的调用拼接
$(\"#tr_title\").after(''+ data.clients[i].client_pkno+''+data.clients[i].client_name+'');
节点对象element
得到元素节点对象的方式
document.getElementById(String);
docuemnt.getElementByTagName(String);
返回对象数组
document.getElementByclassName(String);
元素节点对象.getAttribute(\"title\");
得到属性节点
元素节点对象.setAttribute(\"title\
元素节点对象.childtNodes;
返回该对象的所有子对象的数组
元素节点对象.nodeValue;
图片
节点类型
节点对象.nodeType;
元素节点
1
属性节点
2
文本节点
3
文档加载完毕后调用
window.onload=moth;方法名不带();
onclick();事件调用
平稳退化
有些浏览器会禁用javascript,最好的用户体验就是,单一的javascript代码有问题,不会整个网页都加载不出来。
向后兼容
判断浏览器的版本以及一些方法的正常使用与否。
分离javascript
优化javascritpt
代码优化
发布版本优化---压缩脚本
去掉注释等一些不必要的内容,可以在网上搜索一下现有的工具。
\"javascript:\"伪协议
内嵌的事件处理函数
getElementById();返回true或false的用法
为对象赋予事件函数
共享onload事件
动态创建标记,也就是说创建新的HTML
传统技术
document.write
不是一种好的做法
innerHTML
获取元素里面的文本内容
DOM技术
createElement
appendChild
createTextNode
在已有元素前插入一个新元素
在已有元素后插入一个新元素
获取元素CSS样式以及改变
元素内联样式
元素外联样式
http://www.cnblogs.com/yucheng6/p/9696274.html
jquery
$( )用来获取页面dom,${ }用来接收后台参数
$(\"#span\").text(\"\");向span中写入值
css
采用技巧
设置div内容垂直居中
https://www.cnblogs.com/moqiutao/p/4807792.html
其中模拟表格法用过
当内容为span时,会把span内容全部放大,使得在中间,会导致span的位置无法调整
span默认不是设置大小(宽度和高度)
但是可以设置display: inline-block;
设置span圆角
border-radius:20%;
书籍
样式的继承性
层叠性
颜色定义
字体文本相关
字体定义
font-family
字体斜体定义
font-style
字体加粗
font-weight
字体大小写相关
text-transform
字体大小
font-size
px
em
百分比
装饰
text-decoration
首行缩进
text-indent
保持不同字体的大小
font-size-adjust:aspest
appest值的计算
等等
技巧
合写
div和span的选择
大块的内容用div
标签里面的内容用span
display:none
隐藏元素
容器
margin
padding
padding-上下左右
图像
边框
内嵌式(边框)大小
border
粗细
border-weight
颜色
border-color
线型
border-style
边框的选择
大小(缩放)
weight
像素
height
图文混排
文字环绕图片
float:right
margin来控制文字与图片的距离
图片对齐
通过父容器的text-align:左右中,纵向对齐vertical-align
背景颜色图像
背景是border以内的真个区域,如何设置了border,那么看起来只有padding(包含padding)内的区域
盒子模型
content
width和height都是指的内容的长宽
border-width
border-上下左右-width
border-corlor
上下左右
10种
border-上下左右-style
border-radius边角圆弧
text-algin文本对齐
选择器
基本选择器
标记选择器
标记的标签名
类选择器
标签的class的名字,用.(点)开头
id选择器
标签的id的名字,用#开头
复合选择器
交集选择器
并集选择器
后代选择器
全部后代
直接后代
盒子模型之间的关系
标准文档流
块级元素
分配新行
行内元素
块级元素拥有自己的区域,而行内元素则没有
div和span的区别
div是块级元素,span是行内元素
行内元素可以在块级元素内部,反之不成立
diaplay属性可以变换块级元素和行内元素,甚至设置为none时可以隐藏块级元素
行内元素的水平margin
块级元素的竖直margin
塌陷
嵌套盒子之间的margin
浮动
float
:left,right
元素向左(右)浮动
none
元素向右移动
inherit
从父级继承浮动属性
clear
不是放置在设置浮动的盒子里,而是该盒子外的其他受影响的盒子里,比如文字内容里。
定位
position
static
效果如同relative
偏移量在此情况下,不会起作用
Z-index在此情况下,也不会起作用
relative
默认设置属性
absolute
fixed
top,left,right,bottom
偏移量,指的是在标准流中,对于系统默认定位的便宜量。注意与margin不是一回事。
自定义
业务技巧练习
首页
a标签实现动态拼接路径
href=\"${path}agv/agvParameter.action\"
a标签实现从javascript变量获取动态路径
base href=\"\"
某个单独页面就算没有引用jquey也能使用$
这是因为你其他页面引用了,在浏览器中保存了
真的是这样的吗?
登入
注册
form表单的提交
按钮提交问题
如果想在提交之前做一些验证
可以通过事件方法提交
注意按钮一定要放在form外面
上句话是不对的,可以放在form里面,type为button,但是onclick的方法名一定不能为取名为submit();这很奇怪
分页查询显示
后台
webapp操作性移动端的架构-self
安卓或PDA,页面都在本机,与后台就只用传递数据
但是用服务器端的jsp做页面,就需要每次发送整个页面以及参数,传输内容过多。
可以在jsp中,封装ajax方法,根据来回的参数的控制页面。这样与后台每次也只用传递参数,初始化页面慢一点,页面复杂度高一些。当然也可以在关联性不是很大的页面之间,还是选择发送不同的页面吧,这样至少能在一定程度上减少单jsp代码的复杂度。
get和post请求
get请求有长度限制
在地址栏上可以看到传递参数,不安全
get是一个请求
post是两次请求
在网络环境比较好的时候,两种传输速度无所谓
但是在网络环境不好时,post就安全保证一些
form提交
可以有post请求,也可以get请求
可以将form表单中的数据序列化后,再用ajax请求。
可以直接使用post请求带参传递
但是对于json数据有多层结构时,就比较难以自动拼接(不常用)
可以考虑用一个input传递json的字符创格式,到后台再解析
window.location.href
只能是get请求
window.location.href=\"${pageContext.request.contextPath}/app/login/receive/ordersQuery.action?\"+$.param(data);
注意这里的$.param(data);序列化后的json结构变成了平铺行,因此后台也无法直接获得原始的json结构,当然也可以写一些方法封装嘛
ajax请求
可以与后台来回传递参数
最大的问题就是:后台接受ajax请求,就无法使用model模型转发页面
后台controller
接受可以用封装好的Page
返回参数
modelAndView
用来返回参数到另外一个页面,比较好
PageData,String等
用来返回ajax的需要返回的数据,比较好
SSM架构
文件
pojo.java
mapper.xml
namespace是指定mapper.java的位置吗?
猜想:yqwms中是直接写mapper的名字,因为框架已经做了处理,补全了路径
mapper.java
service.java接口
serviceImpl.java接口实现类
controller
注解
@Controller
@Service
@Autowired与@Resource的区别
说明
mybatis开发dao两种方法:
传统dbc不考虑,太老了
1.原始dao开发方法(程序需要编写dao接口和dao实现类,sqlSessionFactory要写)(掌握)
没有使用mapper代理接口
自定义接口以及实现类,没有完全封装好
1.2yqwms中的doSupport
没有mapper代理接口
封装了sqlSessionFactory等底层代码
2.mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)
使用mapper接口代理对象
sqlSeesionFactroy还没有封装
2.2自定义servcie和在serviceImpl中调用mapper.java以实现更多业务逻辑
数据传递
json有什么好处
与前端交互时,直接传递一个对象一个map一个集合都可以,为什么使用json?
转换json
jsonArray转换只能对于String类型吧
java将map类型转换成json对象
JSONObject dataJson = JSONObject.fromObject(data);
import net.sf.json.JSONObject;
前端报错
Uncaught SyntaxError: Invalid shorthand property initializer
一个是等于号,一个是冒号
这是因为我个人原因失误,将addObject中的参数传成了List
前端需要判断后台参数后做转发处理
描述
移动端web
jsp和controller都在服务端
controller处理的信息方返回为jsp或则转发到其他页面
controller中,用PageData接受没有问题
使用ajax提交请求时,可以返回PageData,不能使用modelAanView
解决办法
ajax接受返回参数,判断各种状态,再用post(非ajax)请求
window.location.href=\"\";请求路径
$.param(data)是jquery自带的将对象类型序列化成httpURl的参数形式
再次接受请求的controller的接受参数为PageData,返回参数为ModelAndView
注意要用json格式
java基础
接口和接口实现类?
日期(见 03学院用书)
细节
Date(long,String,Calendar都可与之按一定形式实现互换,所以就已Date为相互之间的媒介)
必须存放相同类型的内容
数组名是一个引用,它并不是数组本身
数组本身的大小(长度)不可变
数组与集合比较
数组没有add()等方法,也没有重写toString方法;
Arrays.sort();
用于排序
System.arrayCopy;
用于数组的扩容
Arrays.copyOf方法用于数组的复制
集合
Collection
set
list
List接口是Collection的子接口,用于定义线性表数据结构,可以将List理解为存放对象的数组,只不过其元素个数可以动态的增加或减少。
ArrayList
动态数组,更适合随机访问,查找比较好
ArrayList list =new ArrayList();
E get(int index);
获取集合指定下标对应的元素
E set(int index,Element);
将指定的元素存入给定位置,并将原位置返回。
将索引1处的元素和3处的对换
前包括,后不包括。截取父串得到子串,子串与父串共用内存,两则改变其一,另外也会变化
删掉父串中的一段内容
static List asList
List list = Arrays.asList(strArr);
数组变成集合
返回的List集合元素类型由传入的数组元素决定,并且返回的集合我们不能对其增删元素,否则会抛出异常。并且对集合元素进行修改,会影响原数组对应的元素。
Collections.sort();
-void sort(List list);
自然排序
注意排序比较也是Comparable接口,可以重写改接口,定义类的比较原则
可以接口回调,实现临时比较规则。
LinkList
链表,适合插入和删除对象
Queue queue = new LinkedList();
queue.offer(\"1\");
从线性表一段插入元素
这两者方法逻辑完全一样,只是不同操作的性能不同,性能要求不高时可忽略。
通用
Coollection c = new HashSet();
c.add(\"1\");
每次添加自动向索引后添加
注意这里不能间隔索引添加值,原位置元素及后续元素都顺序向后移动。
c.remove(\"1\");
并将删除的元素返回
c.contains(\"String\");
c.addAll(Collection);
c.containsAll(C1);
C中是否全部包含C1中的元素,本质也是equals
c.size();
返回集合包含元素的个数
c.clear();
清空集合
c.isEmply();
是否为空
“”不为空
使用迭代器遍历集合
boolean hasNext();
判断集合是否还有元素可以遍历
E next();
返回迭代的下一个元素
Iterator it = c.iterator(); while(it.hasNext){ String str = it .next(); it.remove(); }
? 使用迭代器,集合元素的类型都要相同吗?
注意这个的迭代器的remove,不能用集合的remove;
toArray();
Object[] toArray();
T[] toArray(T[] a)
String[] strArr = list.toArray(new String[]{});
Map
Object都有hashCode,除了基本类,但是基本类的超类有,比如int i没有,而Interger有
HashMap
Map map = new HashMap();
注意这里的key可以是任何对象,而实际应用中,多为String。
get(Object key);
返回value,不存在就返回null
value值为null
key不存在
containsKey();
判断key是否存在
containsValue();
判断value是否存在
map.keySet();
返回所有key到一个set中
map.entrySet();
将所有的key-value封装成entry到set中。
问题
map的默认排序是什么?
HashMap的值是没有顺序的,他是按照key的HashCode来实现的。
TreeMap默认是升序的
LinkedHashMap
泛型
所有集合都带有泛型参数
循环
增加for循环
本质上的迭代器,该循环不通用于传统循环工作,其作用于遍历集合或数组
for(元素类型e:集合成数组){ 循环体}
类的实例化
使用getInstance()方法的原因及作用先举例说明:下面是一个例子,为什么要把这个类实例化?有什么好处? //实例化 public static DBConnect instance; public static DBConnect getInstance(){ if(instance == null){ instance = new DBconnect(); } return instance; }总的来说:这是单例模式,一般用于比较大,复杂的对象,只初始化一次,应该还有一个private的构造函数,使得不能用new来实例化对象,只能调用getInstance方法来得到对象,而getInstance保证了每次调用都返回相同的对象。详细解释一下:对象的实例化方法,也是比较多的,最常用的方法是直接使用new,而这是最普通的,如果要考虑到其它的需要,如单实例模式,层次间调用等等。*直接使用new就不能实现好的设计,这时候需要使用间接使用new,即getInstance方法。这是一个设计方式的代表,而不仅仅指代一个方法名。1. new的使用: 如Object _object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的, 可以被直接调用的 2. GetInstance的使用: * 在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量, * 可以直接使用,调用多次返回同一个对象。 3.两者区别对照: * 大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每部分的调用 * 用的都是一个新的对象。 * getInstance是少部分类才有的一个方法,各自的实现也不同。 * getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。* * (1) 对象使用之前通过getInstance得到而不需要自己定义,用完之后不需要delete; * (2)new 一定要生成一个新对象,分配内存;getInstance() 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new; * (3) new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。* * 总结:* getInstance这个方法在单例模式用的甚多,为了避免对内存造成浪费,直到需要实例化该类的时候才将其实例化,所以用getInstance来获取该对象,* 至于其他时候,也就是为了简便而已,为了不让程序在实例化对象的时候,不用每次都用new关键字,索性提供一个instance方法,不必一执行这个类就* 初始化,这样做到不浪费系统资源!单例模式 可以防止 数据的冲突,节省内存空间
变量
java中局部变量不赋值也没报错是什么情况?
Java中的变量分为局部变量和全局变量,局部变量就是在方法中声明的变量,而全局变量就是在类中声明的变量,在java中有这么一条规则,声明在方法中的变量在使用时必须要初始化(注意这里是使用时,如果不使用的话,你也可以不赋值,但是一般变量声明了之后都是要使用的,所以你最好初始化),否则不能通过编译。
字符串比较
字符串是一个比较特殊的对象。字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,我们叫他串池!字符串对象的创建之后会被放入到串池中。串池有一个特点,就是对于相同对象,池中只存储一份。那么串池把神马样的String看做是相同的String呢。请看:String a=\"abc\";和String b=\"abc\" 对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a 和b 两个引用罢了!对于String只要用new关键字new出来的string,都是单独的一个对象。而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。而String中的equls方法已经做了处理,他是比较内容,所以要比较string的内容的时候而不是地址的时候,那就用它吧!
equals方法常用toString比较,有的类也会重写toString方法。
数据库
sql语句
在ssm框架中,mapper.xml等中,=不能直接写,应该用替换符号代替
and t1.create_time >= #{create_time} and t1.create_time <= #{create_timePlusOne}
存储过程
self命名准则
表名
t开头
下划线连接
单词都小写
字段名
后台到前台,特别是数据库,小写用_连接
前后变量命名用驼峰命名,再返回。一直到数据中,sql中就会出现两个命名方法就不会乱
全栈练习笔记
0 条评论
回复 删除
下一页