黑马程序员spring教程
黑马程序员spring教程(精选13篇)
黑马程序员spring教程 第1篇
C++易犯错知识点(一)
1、赋值构成一个表达式,具有值,其值为赋值符左边表达式的值。表达式和语句的一个重要区别是,表达式有值,而语句没有值。
2、隐式类型转换总是朝着表达数据能力更强的方向,并且转换总是逐个运算符进行的。如 float f=3.5;int n=6;long k=21;double ss=f*n+k/2;//在计算ss时,首先将f和n转换成double,算得21,然后计算k/2得10,再将10(long int)转换成double,最后得31。
27、C++基础笔记(一)墨涵天地 有符号数向无符号数转换。
3、当又有声明又有定义时,定义中不允许出现默认参数,如果函数只有定义,才允许默认参数出现在定义中。默认值可以是一个全局变量,全局常量,或是一个函数,但是不能是局部变量,因为默认参数的函数调用是在编译时确定的,而局部变量的位置和值在编译时是无法确定的。如 int a=1;void fun(){ int i;void g(int x=i);//not right int g(int x=a);//right
}
4、define宏定义指令
1)使用其定义常量已被C++中的const定义语句所代替。2)用来定义带参数的宏,已被C++的内联函数所代替。3)其一个有效的使用是在条件编译中。
5、编译时必须知道数组的大小。如
int a[]={1,2,3,4,5};//编译器会自动去数 for(int i=0;i 7、Free和malloc int* a;a=(int*)malloc(sizeof(int));cout< 8、指向常量的指针,指针常量,指向常量的指针常量 指向常量的指针:通过指针不能改变所指向的变量的值,但是指针的值可以变化(即指针可 以指向其它变量的地址)。形式如const int* pi=&a;原来的变量的访问属性也不会发生改变,如原来是普通变量,则其值可以变化,原来是常变量,则其值不能变化。 指针常量:在定义时必须初始化,且一旦赋值,则以后该指针的值将不会再发生变化(即不能再指向其它地址)。形如char* const pc=“abcd”;注意,pc的值是不能再改变了,但是*pc的值可以变化,如*pc=b;指向常量的指针常量:具有上述两具指针的特点,须在定义时初始化,且一旦赋值,则以后该指针的值将不会再发生变化,且通过指针不能改变所指向的变量的值,形如const int* const cpc=“perfect”;注意,这种情况下,*cpc的值也是不能改变的,如*cpc=n是不对的。int main(){ char* const pc=“abcd”;cout< } 9、sum(int array[],int n)与sum(int* array,int n)是等价的。 10、函数返回值,可以返回堆地址,也可以返回全局或静态变量的地址,但是不能返回局部变量的地址。 11、void指针是空类型指针,它不指任何类型,它仅仅是一个地址,不能进行指针运算,也不能进行间接引用。 NULL与void* 是不同的概念,NULL是一个指针值,任何类型的指针都可赋予该值。而void* 是一种类型(语法上是一个类型,本质上不是,没有任何一个变量或对象,其类型为void),是一种无任何类型的指针。不允许对void进行引用。 12、由引号(“ ”)标识,但不是用来初始化数组的字符串,是字符串常量,如cout<<“hello”< 由于字符串常量的地址属性,两个同样字符组成的字符串常量是不相等的,字符串常量的比较是地址的比较。 字符串常量,字符数组名(常量指针),字符指针均属于同一种数据类型。 13、不能建立引用的数组,因为数组是某个数据类型的集合,数组名表示起始地址,它不是数据类型。如 int a[10];int& a1[10]=a;//not right 引用本身不是一种数据类型(int&不是类型,定义时也不产生内存空间),所以没有引用的引用。也没有引用的指针。引用是变量或对象的引用,而不是类型的引用,所以有空指针,但是没有空引用。Int& ri=NULL //没有意义 可以用引用返回值。在通常情况下,C++会建立一个临时变量以将函数返回值带回。但是如果用引用,则不用建立临时变量。 C++规定,临时变量或对象的生命周期在一个完整的语句表达式结束后便宣告结束。所以如果以返回值初始化一个引用,应当先建立一个变量,将函数返回值赋于这个变量,作如下处理: int x=fn1(5.0);//在这一句后临时变量生命周期将结束 int& b=x;************************* float temp; float& fn2(float r){ temp=10*r;return temp;} 用如上的方法,则函数返回值将不再创建临时变量,而直接与全局变量temp共享内存单元 ******************************* 以引用的初始化,可以是变量,也以是常量,也可以是一定类型的堆空间变量,但是引用不是指针,如下表达是不对的: int& a=new int(2); //not right 下面是用堆空间变量初始化引用的一个例子: #include //...{ cin>>rd; cout< cout<<&rd; } delete& rd;//或delete pd return 1;} 注意:用double& rd来定义引用,而&rd则是取引用所指向的空间的地址。 14、声明一个结构并不分配内存,内存分配发生在定义这个新数据类型的变量中。结构不像数组,结构变量不是指针,&结构变量 取到的是结构中第一个成员变量的地址。结构变量可以相互赋值。结构成员不能作自身的结构变量,但是可以用结构指针作为成员。 15、将类定义和其它成员函数定义分开,是目前开发程序的通常做法。我们把类定义(头文件)看成是类的外部接口,类的成员函数定义看成是类的内部实现。 类是一个抽象的概念,并不是一个实体,并不含有属性值,而只有对象才占有一定的空间,含有明确的属性值。 --在Where语句中使用子查询 -----雇员中最高薪水的人员名称--1,先求出最高薪水 --2,再求雇员中最高薪水的人员名称 select ename from emp where sal=(select max(sal)from emp) --有哪些人的薪水是在整个雇员的平均薪水之上的 select ename,sal from emp where sal >(select avg(sal)from emp) -----雇员中哪些人是经理人 --1,首先查询mgr中有哪些号码--2,再看有哪些人员的号码在此出现 select distinct mgr from emp where mgr is not null order by mgr select ename from emp where empno in(select distinct mgr from emp where mgr is not null)--where in 中不让写orderby select ename from emp where empno in(select distinct mgr from emp where mgr is not null order by mgr) -----在From子句中使用子查询 ---- --部门平均薪水的等级 --1,首先将每个部门的平均薪水求出来 --2,然后把结果当成一张表,再用这张结果表和salgrade表做连接,以此求得薪水等级 select deptno,avg(sal)from emp group by deptno select * from(select deptno,avg(sal)avg_sal from emp group by deptno)t join salgrade on avg_sal between losal and hisal; -----每个部门最高薪水的人员名称 --1,首先将每个部门的最高薪水求出来 --2,然后把结果当成一张表,再用emp和这张结果表做连接,以此求得每个部门最高薪水的人员名称 select deptno,max(sal)from emp where deptno is not null group by deptno select ename from emp e join(select deptno,max(sal)max_sal from emp where deptno is not null group by deptno)t on sal = max_sal and e.deptno = t.deptno -----哪些人的薪水在部门的平均薪水之上--1,首先将每个部门的平均薪水求出来 --2,然后把结果当成一张表,再用emp和这张结果表做连接,以此求得哪些人的薪水在部门的平均薪水之上 select deptno,avg(sal)avg_sal from emp group by deptno select * from emp join(select deptno,avg(sal)avg_sal from emp group by deptno)t on(sal>avg_sal and emp.deptno=t.deptno)-----求部门中(所有人的)平均的薪水等级,形式如:--deptno avg_grade--10 3.67--20 2.8--30 2.5--1,先求每个人的薪水等级--2,再按照部门分组,求平均数 select deptno,sal,grade from emp join salgrade on sal between losal and hisal select deptno,avg(grade)from(select deptno,sal,grade from emp join salgrade on sal between losal and hisal)t group by deptno ------------------------------使用伪字段:rownum,----------------------------------------------------用来标识每条记录的行号,行号从1开始,每次递增1 select rownum,emp.* from emp;--oracle下rownum只能使用 <<=,不能使用 = >>= 等比较操作符,select rownum,emp.* from emp where rownum<5;--当rownum和order by 一起使用时,会首先选出符合rownum条件的记录,然后再排序 --(错误的写法)例如,当我们要求薪水最高的前5个人时,最直接的想法可以这样写: select * from emp where rownum<5 order by sal desc--(正确的写法)可以这样写 从事JavaEE软件开发过程中使用其他的一些框架比如Webwork、Struts2, XML文件的配置工作量都比较大, 随着工程逻辑复杂度的上升, XML文件也越来越难以维护, 而使用Spring3 MVC可以基于全注解驱动, 代码编写极为方便, 模块代码耦合度低。 2实现过程 首先在myeclipse10.0工程中新建Web project (如图1所示) , 工程自动在WebRoot目录下生成一个index.jsp文件, 拷贝Spring核心jar包和Spring web jar包到WEB-INFlib目录下, 如图2所示。使用Spring MVC, 要配置DispatcherServle用于拦截匹配的请求。DispatcherServlet就是一个Servlet, 所以可以配置多个DispatcherServlet。DispatcherServlet是前置控制器, 配置在web.xml文件中的。 (1) 配置web.xml文件 (2) 在WEB-INF路径下添加spring-servlet.xml 内容如下: (3) 创建controller 在src目录下新建HelloWorldController.java包路径为controller。 创建一个Controller时, 不需要继承任何类或实现接口, 只需要加入@Controller的注解即可。将类名前加上该注解, 当Spring启动或者Web服务启动Spring会自动扫描所有包: 真正让HelloWorldController具备Spring MVC Controller功能的是@RequestMapping这个注解。@RequestMapping可以标注在类定义处, 将Controller和特定请求关联起来。 (4) 修改工程自动创建的WebContent目录下的index.jsp文件, 添加一个链接 (5) WebRoot目录下新建view文件夹, 同时在view文件夹下新建hello.jsp文件来显示问候语: 3结语 开发完成, 启动tomcat, 测试访问, 如图3所示。 图3测试效果: 单击SayHello链接, 进入Controller处理后返回hello.jsp页面显示问候语, 同时在控制台输入问候语, 如图4, 图5所示。 参考文献 [1]Seth Ladd, Darren Davison, 等.Expert Spring MVC andWeb Flow.Apress, 2008. [2]陈雄华, 林开雄.Spring3.x企业应用开发实战.电子工业出版社, 2012. [3]Craig Walls, Ryan Breidenbach.Spring in Action.ManningPublications, 2008. Oracle 中的日期型数据实际含有两个值: 日期和时间。默认的日期格式是 DD-MON-RR.函数SYSDATE 返回: 日期 时间 在日期上加上或减去一个数字结果仍为日期。两个日期相减返回日期之间相差的天数。 可以用数字除24来向日期中加上或减去小时。 日期的数学运算 日期函数 转换函数 隐式数据类型转换 降序排序 按别名排序 多个列排序 ORDER BY子句 排序的规则 可以按照select语句中的列名排序 可以按照别名列名排序 可以按照select语句中的列名的顺序值排序 如果要按照多列进行排序,则规则是先按照第一列排序,如果相同,则按照第二列排序;以此类推 Desc: Ajax能实现所有操作都是在不刷新窗口的情况下完成的 同步和异步介绍 同步 客户端在浏览的时候,服务器在等待,服务器在处理请求的时候,客户端在等待,这是同步的。用户体验不好。 异步 客户端将请求的地址交个ajax对象,ajax对象去服务器获取数据,ajax对象获取数据后再将数据交给客户端。这样,浏览器界面没有跳转,所以用户体验比较好。 创建AJAX对象 AJAX的核心就是javascript的XmlHttpRequest对象 1.1.1 主流浏览器创建方法 火狐、google、苹果safari、opera包括IE7以上版本的浏览器 1.1.2 ie6、7、8 实例化ActiveXObject对象的参数有: var request= new ActiveXObject(“Microsoft.XMLHTTP”);//最原始方式 var request = new ActiveXObject(“Msxml2.XMLHTTP”);//升级 var request = new ActiveXObject(“Msxml2.XMLHTTP.3.0”);//升级 var request = new ActiveXObject(“Msxml2.XMLHTTP.6.0”);//IE维护的最高版本 第二十五步:设置时区,默认即可,直接点击【下一步】 第二十六步:设置密码,密码对用的用户名是root 密码有限制:最少是6位,并且建议是大写+小写+数字的组合 设置完成之后点击【下一步】 第二十七步:选择安装类型,这个时候选择【使用所有空间】,然后点击【下一步】 然后选【将修改写入磁盘】 第二十八步:选择Linux系统的安装模式,默认desktop-现在自定义-下一步 下一步中勾选【开发】中的【开发工具】 注意:一定要确保【开发工具】前面有一个√。 然后再点击【下一步】 第二十九步:等待安装完成重新引导,这个过程需要安装1160多个软件,时间大概消耗20分钟左右 第三十步:完成之后点击【重新引导】,系统会重新启动 第三十一步:在欢迎界面点击【前进】 DOM(文本对象模型(Document Object Model))W3C组织推荐的处理可扩展标志语言的标准编程接口。W3C的DOM,可以使程序或脚本(JS或AS、JScript),动态的访问或操作文档的内容、结构、样式。 DOM只是一个标准,就是操作网页的标准。而这个标准(模型)在浏览器中,以“对象”的方式实现。DOM的分类 核心DOM:提供了操作HTML文档(显示)或XML文档(存储数据)的公共的属性和方法。 HTMLDOM:针对HTML文档,提供的专有的属性和方法。EventDOM:事件DOM,提供了很多的常用事件。CSSDOM:提供了操作CSS的一个接口。HTML节点树 DOM中节点的类型: document文档节点:代表整个网页,document文档节点不对应标记。是访问文档中各元素的起点。 element元素节点:元素节点对应于网页中的各标记。attribute属性节点:每个元素都有若干个属性。Text文本节点:文本节点是最底层节点。核心DOM公共属性和方法 nodeName:节点名称。nodeValue:节点的值。firstChild:第一个子节点。lastChild:最后一个子节点。parentNode:父节点。 childNodes:子节点列表,是一个数组。节点访问 查找html节点的方法 document.firstChild document.documentElement(兼容性较好)查找body节点的方法 document.firstChild.lastChild document.body(推荐使用)节点属性 1、getAttribute()——获取属性的值 描述:获取节点属性的值。 语法:nodeObj.getAttribute(name)参数:name代表当前节点的某个属性。举例:var src = imgObj.getAttribute(“src”) 2、setAttribute()——添加属性 描述:给某个节点添加属性。 语法:nodeObj.setAttribute(name,value)参数: name代表属性名称。value代表属性的值。 举例:imgObj.setAttribute(“src” , “images/02.jpg”) 3、removeAttribute()——删除属性 描述:删除某个节点的属性。 语法:nodeObj.removeAttribute(name)举例:imgObj.removeAttribute(“src”)案例: //当网页加载完成,调用JS程序 window.onload = function(){ } //函数:删除src属性 function removeImg(imgObj){ //删除src属性 //查找img节点 var imObj = document.body.firstChild;//向img节点添加src属性 imgObj.setAttribute(“src”,“images/01.jpg”);//向img节点添加width属性 imgObj.setAttribute(“width”,400);//向img节点添加border属性 imgObj.setAttribute(“border”,2);//向img节点添加style属性 imgObj.setAttribute(“style”,“padding:20px”);//向img节点添加onclick属性 imgObj.setAttribute(“onclick”,“removeImg(this)”); } imgObj.removeAttribute(“src”);imgObj.removeAttribute(“width”); 简单的理解,可以把SignalMapper这个类看成是信号的翻译和转发器,它可以把一个无参数的信号翻译成带int参数、QString参数、QObject*参数或者QWidget*参数的信号,并将之转发。这么一说大家有没有联想到该类的适用范围呢?比如说:我有一堆的button,可以把clicked事件放在一个函数里处理,只要给button编个号或者给button起个名就行了,这样就不用给每个button写一个slot了,岂不是很方便? 使用方法 首先把原始的信号连接到QSignalMapper类的map()槽函数,这样QSignalMapper能在第一时间接收到原始信号; 其次调用setMapping方法建立映射关系,告诉QSignalMapper对象怎样去处理原始信号。(映射关系通过对应一个整数、字符串或者QWidget*实现) 最后通过接收QSignalMapper类转化后的带参信号mapped()与槽函数连接,在槽函数中获得需要的数据,并作出对应的处理。 映射的关系可以通过removeMappings()被移除。 示例: // 头文件 classWidget:publicQWidget { Q_OBJECT public: explicitWidget(QWidget*parent=0);~Widget(); publicslots: //自定义槽函数 voidslotClicked(QStringtext); private: Ui::Widget*ui;QSignalMapper*signalMapper;};// 源文件 Widget::Widget(QWidget*parent): QWidget(parent), ui(newUi::Widget){ ui->setupUi(this); QStringListtextList;signalMapper=newQSignalMapper(this);// 布局管理器 QVBoxLayout*vLayout=newQVBoxLayout(this);textList<<“北京”<<“上海”<<“广州”<<“南京”<<“天津”;for(inti=0;i<5;++i){ // 动态创建按钮 QPushButton*button=newQPushButton(textList[i]);button->setFixedSize(50,30);//按钮的信号和QSignalMapper类的map()槽函数关联 // 原始信号传递给signalMapper connect(button,SIGNAL(clicked(bool)),signalMapper,SLOT(map()));//设置signalmapper的转发规则, 转发为参数为QString类型的 // 信号,并把textList[i]的内容作为实参传递。 signalMapper->setMapping(button,textList[i]);vLayout->addWidget(button);} //将转发的信号连接到最终的槽函数 connect(signalMapper,SIGNAL(mapped(QString)),this,SLOT(slotClicked(QString)));} // 自定义槽函数 voidWidget::slotClicked(QStringtext){ QMessageBox::information(this,“ButtonClicked”,text);} 二、添加/修改数据 1./* 2.3.4.5.6.7.8.9.一、获取SharedPreferences对象 1.sp =getSharedPreferences(“info”, MODE_PRIVATE); * 如果想往 sp Editor 中添加、修改、删除数据则需要通过 sp 获取到 */ Editor editor = sp.edit(); // 设置数据 editor.putString(“name”, name);editor.putString(“pwd”, pwd); // 一定要记得执行提交方法,不然前面保存的数据没有任何效果 editor.commit(); 三、获取数据 1./* 2.3.4.5.6.7.* 从sp中获取数据 * 第一个参数相当于key * 第二个参数是该值如果获取不到的默认值 */ Stringname=sp.getString(“name”,“");Stringpwd = sp.getString(”pwd“, ”“); 四、删除数据 1.// 删除数据 2.3.4.5.6.7.8.Editoredit= sp.edit();//清空所有 edit.clear();//删除key为name的数据 edit.remove(”name“);//提交 edit.commit(); 五、sp的连点操作 Editor 的每个方法都返回了自己本身,因此支持连点操作。将添加数据使用连点操 作的方式修改后如下: 1.//连点操作 onprogress事件对象可以监听到已经上传的文件大小,总大小 大约每隔100毫秒调用onProgress事件一次 完整代码 14 39 黑马程序员spring教程 第2篇
黑马程序员spring教程 第3篇
黑马程序员spring教程 第4篇
黑马程序员spring教程 第5篇
黑马程序员spring教程 第6篇
黑马程序员spring教程 第7篇
黑马程序员spring教程 第8篇
黑马程序员spring教程 第9篇
黑马程序员spring教程 第10篇
黑马程序员spring教程 第11篇
黑马程序员spring教程 第12篇
在vim中存在三种模式:命令模式、末行模式、编辑模式。三个模式之间的相互关系:
2.4、末行模式
默认是命令模式,如果说需要进入到末行模式,则可以在命令模式中按下英文“:”。
2.4.1、保存/另存
保存:
语法::w(write)
另存:
语法: :w 文件的路径
另存的结果:
2.4.2、退出
语法:
:q(quit)
提示:有些时候,如果对当前编辑的文档已经进行了修改,但是又不想保存想直接退出,则可以输入:q!,同样也有:wq!。其中的感叹号表示强制的意思。
2.4.3、查找
语法:
/字符串
对于查找的结果,同样会和打开文件的第三种方式一样,进行高亮显示,可以使用N和n进行上一个和下一个结果的切换。
2.4.4、替换
第一种情况:
语法:
:s/需要替换的字符串/替换成的字符串 一处符合条件的字符串)例如:
第二种情况:
语法:
:s/需要替换的字符串/替换成的字符串/g(替换光标所在行全部符合条件的地方,g表示global)例如:
(表示替换当前光标所在的行的第第三种情况: 语法:
:%s/需要替换的字符串/替换成的字符串(表示替换当前文档中每一行第一个符合条件的地方)例如:
第四种情况: 语法:
:%s/需要替换的字符串/替换成的字符串/g 地方)例如:
黑马程序员spring教程 第13篇
1、解压文件10201_database_win32.zip,并双击解压目录下的setup.exe,出现安装界面,如下:
2、输入口令和确认口令,如:password,点击下一步,出现如下进度条,注:此口令即是管理员密码。
3、检查先决条件,选中红框所示的选择框,如下图:
4、点击“下一步”,出现“概要”界面,点击“安装”。
5、出现安装进度条,等待安装完成,如下图:
6、安装完成后,自动运行配置向导,如下图,等待其完成:
7、完成后,出现“口令管理”界面,点击“口令管理”,如下图:
8、将SCOTT和HR用户的沟去掉(解锁这两个账户),如下图所示,点击“确定”:
9、回到“口令管理”界面,点击“确定”,如下图:
黑马程序员spring教程
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


