Java,
Java,
实习旅程(18)
开始我的实习旅程,记录所学到的知识,以及需要掌握的知识。
文章目录
- 实习旅程(18)
- 第一章程(09-10)
- 一、SVN的安装、配置,使用SVN从仓库里导出项目
- 二、IDEA的安装、配置,将Maven项目导入IDEA。
- 三、`$(function(){}) `和`$(document).ready(function(){})`。
- 四、memcache和Redis。
- 五、跨界面传值(jsp界面之间的传值)和div的隐藏与显示。
- 六、redraw(重绘)与reflow(回流)。
- 七、部署前后端分离项目。
- 八、数据库中的 like concat 查询。
- 九、Springboot和Springcloud。
- 1.Springboot的简述
- 2.Springcloud的简述
- 3.springboot和springcloud的区别
- 十、设计模式:单例和代理
- 1.单例模式(Singleton)
- 2.代理模式(Proxy)
- 十一、restful接口用postman或者swagger测试
- 十二、vue.js
- 十三、oracle的基本语法和链表查询:左右连接、全连接、内链接
- 第二章程(11)
- 一、获取变量或者某个标签、属性的值。
- 二、js里关于弹窗的删除。
- 三、json数据。
- 四、html转换为pdf(wkhtmltopdf)。
- 1.wkhtmltopdf工具是什么
- 2.wkhtmltopdf的优点
- 3.wkhtmltopdf的使用
- 4.解决分页问题
- 五、实例问题。
- 1.js里的返回问题
- 2.判断后端传过来的数据是否为空
- 3.下拉框
- 六、初始页面时加载方法。
- 七、按回车触发事件。
- 八、请求之后。
- 第三章程(12)
- 一、随机生成加密的Id。
- 二、获取当前用户。
- 三、计算一个程序耗时多少。
- 四、js实现小数点后两位。
- 五、字符串,集合,数组之间的转换。
- 六、input输入框的实时更新检验。
- 七、JQuery的组建弹框。
- 第四章程(01)
- 一、双日历插件。
- 二、适配器:(界面初始加载)。
- 三、Enter按键。
- 四、获取当前浏览器的版本号。
- 第五章程(02-03)
- 一、Js数组去重。
- 二、Redis闪退启动问题。
- 三、Shiro。
- 四、MySQL。
- 五、Linux。
- 六、WebService。
第一章程(09-10)
一、SVN的安装、配置,使用SVN从仓库里导出项目
SVN的官方下载地址:https://www.visualsvn.com/visualsvn/download/tortoisesvn/
详情请参考:SVN的安装与配置
二、IDEA的安装、配置,将Maven项目导入IDEA。
IDEA相对于eclipse来说,运行大的项目,它的速度能够更快一点。要导入Maven项目,只需要导入该maven项目的pom.xml,可以自动给你下载jar包。
IDEA的官方下载地址:https://www.jetbrains.com/idea/download/#section=windows
详情请参考:IDEA的安装与配置
三、$(function(){})
和$(document).ready(function(){})
。
1.$(function() {})
是$(document).ready(function()
的简写。
2.$(document).ready(function()
可以写在jsp或者html页面的底端,能优先加载,$(function() {})
需要写在前端,比如head标签里面,否则会被其他的js代码覆盖。
四、memcache和Redis。
它们都是都是内存数据库,区别之处是存储的数据类型方面以及存储性能。
1.数据类型方面:
memcache可以存储普通数据以外,还可以存储图片、视频;Redis除了褚存简单的k/v类型的数据以外,同时还提供list、set,hash等数据结构的存储。
2.存储性能方面:
memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复。redis相对来说更安全。
参考博客:https://blog.csdn.net/chaoluo001/article/details/70740307
五、跨界面传值(jsp界面之间的传值)和div的隐藏与显示。
jsp页面的传值可用EL表达式: <%=%>
和${}
。
1.<%=%>
,需要明确指出从哪个对象取值。<%=request.getAttribute("x")%>
取request中的x的值,x没有会报错。
2.${}
自动从内置对象中查找值。${x}
查找x的顺序:当前页面—>request—>session—>application.没找到x就输出空值。
3.div的隐藏与显示:
代码如下:
// An highlighted block
<div id="123" style="display:none;">
<p>显示的内容</p>
</div>
<div id="switch" onclick="mySwitch()">点击显示</div>
<script language="javascript">
function mySwitch(){
document.getElementById('123').style.display = document.getElementById('123').style.display=='none'?'block':'none';
}
</script>
结果:
六、redraw(重绘)与reflow(回流)。
1.redraw(重绘)
当页面元素样式改变时不影响元素在文档流中的位置时(比如background,color等)这时候浏览器只会将新样式赋予元素进行;重新绘制操作。
2.reflow(回流)
当改变的操作响应文档内容或者结构,或者元素的位置时就会触发回流。
详情请参考博客:https://blog.csdn.net/web_yh/article/details/79300987
七、部署前后端分离项目。
1、使用Nginx来访问静态资源。
在本地安装nginx并且修改nginx.conf,修改相关配置,将web访问的端口的资源进行更改,配置如下:
server {
listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat_pool;
proxy_redirect off;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|woff|woff2|ttf|eot|map)$ {
root D:\Workspaces\esop-html;
index index.html;
}
listen对象改为你本地的tomcat访问端口,最下面location中的root改为你前端项目中静态资源的位置,这样就可以实现只部署后端的项目就能访问前端的页面了。
2、将前端项目转换为动态的web项目,随后端项目一起丢入tomcat
这个方案省去了在本地安装和配置nginx,但是也只适用于开发阶段项目的部署运行和调试,真正在生产环境通常前后端项目会部署在不同的服务器。
1)如果是Intellij Idea,在导入前端项目之后,右键项目 add framework support --> web application,这时将会把前端项目转换为一个javaweb项目,然后将静态资源放在生成的web目录下即可。
2)如果是eclipse,可以新建一个javaweb项目然后将静态资源放入web或者webcontent目录下,或者直接先导入前端项目,然后通过 project facts 将项目转换为dynamic web项目并勾选 js等相关配置。然后,运行项目时把后端的war包和前端的war包一同添加到 deployment中运行即可。
八、数据库中的 like concat 查询。
MySQL中的Concat:
Select * from table1 where ‘text’ like CONCAT(%,(select name from table2 where id =3),%)
Group_concat: 把查出来的一列结果用逗号连成一个字符串。
九、Springboot和Springcloud。
有关Springboot和Springcloud的详情请参考:https://www.cnblogs.com/dream-to-pku/p/9222731.html
百度网盘视频(需要了解可下载看):
链接:https://pan.baidu.com/s/1fw0hj6-h67XsmS8W7gsfsQ
提取码:j92a
1.Springboot的简述
Springboot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务。
特点:简单易用,初学者和大牛都可以轻松上手,其中的注解会给使用者提供方便;Spring boot对第三方技术进行了很好的封装和整合,提供了大量第三方接口;
可以通过依赖自动配置,不需要XML等配置文件。
2.Springcloud的简述
Springcloud是一种云端分布式架构解决方案,基于spring boot,在spring boot做较少的配置,便可成为 springcloud 中的一个微服务。
3.springboot和springcloud的区别
Spring boot | Spring cloud |
---|---|
Spring的一套快速配置脚手架,可以基于Spring Boot快速开发单个微服务 | 一个基于Spring Boot实现的云应用开发工具 |
专注于快速、方便集成的单个个体 | 关注全局的服务治理框架 |
使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置 | 很大的一部分是基于Spring Boot来实现 |
可以离开Spring Cloud独立使用开发项目 | Spring Cloud离不开Spring Boot,属于依赖的关系 |
十、设计模式:单例和代理
1.单例模式(Singleton)
单例模式属于创建模型,是设计模式中比较简单而又最常用的模式之一。通过单例模式可以保证系统中,应用该模式的类只有一个类实例。
进一步了解请参考:https://blog.csdn.net/cl534854121/article/details/80518079
public class Singleton {
private Singleton(){}
public static Singleton getInstance(){
return SingletonInstance.instance;
}
private static class SingletonInstance{
static Singleton instance = new Singleton();
}
}
单例模式的懒汉式和饿汉式:
- 饿汉式:线程安全,不支持懒加载,第一次加载类到内存中时就会初始化。
/**
- 饿汉式单例模式.
*/
public class Singleton {
/** 全局唯一实例. */
private static final Singleton singleton = new Singleton();
private Singleton() {}
public static Singleton getSingleton() {
return singleton;
}
}
- 懒汉式:非线程安全,相对饿汉式,懒汉式提供了在需要时候初始化的方式,不建议使用。
/**
- 非线程安全的懒汉式.
*/
public class Singleton {
private static Singleton singleton;
private Singleton() {}
/**
* 通过懒加载的方式获取实例,但是非线程安全.
* @return Singleton实例
*/
public static Singleton getSingleton() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
开发的时候一般用第一种模式,饿汉式,因为在涉及到多线程的问题式,懒汉式会导致一系列的安全隐患,但是懒汉式是单例模式中的重要考察点。
2.代理模式(Proxy)
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。有中介隔离作用,能开闭原则,增加功能。
进一步了解可参考:https://www.cnblogs.com/daniels/p/8242592.html
例如:给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。
- 静态代理
第一步:创建服务类接口
/**
* 接口
*/
public interface IUserDao {
void save();
}
第二步:实现服务接口
/**
* 接口实现
* 目标对象
*/
public class UserDao implements IUserDao {
public void save() {
System.out.println("----已经保存数据!----");
}
}
第三步:创建代理类
/**
* 代理对象,静态代理
*/
public class UserDaoProxy implements IUserDao{
//接收保存目标对象
private IUserDao target;
public UserDaoProxy(IUserDao target){
this.target=target;
}
public void save() {
System.out.println("开始事务...");
target.save();//执行目标对象的方法
System.out.println("提交事务...");
}
}
第四步:编写测试类
/**
* 测试类
*/
public class App {
public static void main(String[] args) {
//目标对象
UserDao target = new UserDao();
//代理对象,把目标对象传给代理对象,建立代理关系
UserDaoProxy proxy = new UserDaoProxy(target);
proxy.save();//执行的是代理的方法
}
}
优点:可以做到在不修改目标对象功能的前提下对目标对象进行功能扩展。
缺点:代理对象需要与目标对象实现一样的接口,所以会有很多代理类 ,一旦接口增加方法,目标对象与代理对象都要维护。(解决:采用动态代理)
-
动态代理:
1)不再需要再手动的创建代理类,只需要编写一个动态处理器就可以了。
2)利用JDK的API,动态的在内存中构建代理对象,,不需要实现接口,也成为JDK代理或者接口代理。
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )
该方法是在Proxy类中是静态方法,且接收的三个参数依次为:
ClassLoader loader
:指定当前目标对象使用类加载器,获取加载器的方法是固定的。
Class<?>[] interfaces
:目标对象实现的接口的类型,使用泛型方式确认类型。
InvocationHandler h
:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入。3)代理对象不需要实现接口,但是目标对象一定要实现接口,否则不能用动态代理。
-
第一步:编写动态处理器
/**
* 创建动态代理对象
* 动态代理不需要实现接口,但是需要指定接口类型
*/
public class ProxyFactory{
//维护一个目标对象
private Object target;
public ProxyFactory(Object target){
this.target=target;
}
//给目标对象生成代理对象
public Object getProxyInstance(){
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("开始事务2");
//执行目标对象方法
Object returnValue = method.invoke(target, args);
System.out.println("提交事务2");
return returnValue;
}
}
);
}
}
- 第二步:编写测试类
/**
* 测试类
*/
public class App {
public static void main(String[] args) {
// 目标对象
IUserDao target = new UserDao();
// 【原始的类型 class cn.itcast.b_dynamic.UserDao】
System.out.println(target.getClass());
// 给目标对象,创建代理对象
IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance();
// class $Proxy0 内存中动态生成的代理对象
System.out.println(proxy.getClass());
// 执行方法 【代理对象】
proxy.save();
}
}
十一、restful接口用postman或者swagger测试
十二、vue.js
十三、oracle的基本语法和链表查询:左右连接、全连接、内链接
第二章程(11)
一、获取变量或者某个标签、属性的值。
methods | show |
---|---|
用session取数据 | session.getAttribute("变量名"); |
EL表达式 | <%=%> 和${} |
获取id | $("#name").val() |
获取class | $(".name").val() |
获取标签属性 | $("#id").find("标签名").html() 或者document.getElementById("id").className |
全局变量 | var 全局变量名 |
二、js里关于弹窗的删除。
var id =$("#id").val();
_confirm("小提示","是否删除","确定|取消",{'ok':function(){
if(true){
$.ajax({
url:'${baseURL}',
type:'post',
data: {"data.id":id},//data.id 为后端data对象的id
dataType:'json',
success:function(result){
if('0'==result.code){
method();
}
}
});
}
},'fail':function(){}});
三、json数据。
json数据的传输:
net.sf.json.JSONobject=net.sf.json.JSONobject.fromObject("");
四、html转换为pdf(wkhtmltopdf)。
1.wkhtmltopdf工具是什么
wkhtmltopdf:是一个使用 Qt WebKit 引擎做渲染的,能够把html 文档转换成 pdf 文档 或 图片(image) 的命令行工具。
安装准备:
- 官网 : https://wkhtmltopdf.org/
- 下载地址:https://wkhtmltopdf.org/downloads.html
- 如想对该工具的进一步了解请参考:https://www.jianshu.com/p/559c594678b6
安装之后:
- 配置环境变量,把你安装wkhtmltopdf目录下的bin子目录加到 PATH 环境变量下。
- 执行
wkhtmltopdf -V
出现类似wkhtmltopdf 0.12.3.2 (with patched qt)
的版本信息,就是安装成功了。 - 需重启电脑才能在命令行里使用。
2.wkhtmltopdf的优点
1). 生成PDF时会自动根据你在HTML页面中H标签生成树形目录结构
2).小巧方便,转换速度快。
3). 夸平台,在Liunx下用,在win下也可以用。
3.wkhtmltopdf的使用
1)把一个html文件转换成PDF
命令格式 :wkhtmltopdf xxx.html xxx.pdf
C:\Users\admin>wkhtmltopdf 1.html 1.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
当你看到类似上面的内容时,说转换已经完成了,转换好的pdf文档在C:\Users\admin>
目录下。
2)把一个 url 指向的网页转换成PDF
命令格式 : wkhtmltopdf url xxx.pdf
C:\Users\admin>wkhtmltopdf www.wmyao.com wmyao.pdf
Loading pages (1/6)
QFont::setPixelSize: Pixel size <= 0 (0) ] 55%
Counting pages (2/6)
QFont::setPixelSize: Pixel size <= 0 (0)=====================] Object 1 of 1
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
3)把html文件 和 url指向的网页 转换成图片
命令格式 :
wkhtmltoimage xxx.html xxx.jpg
wkhtmltoimage url xxx.jpg
可以转换成任意的图片格式。
4.解决分页问题
div{ width:800px; min-height:1362px;margin:auto;page-break-inside:avoid;}
注:html的table中不能用thead,用了后换页会出现两个表头
在HTML页面中,想要分页的div的样式最后添加一个:page-break-inside:avoid;
五、实例问题。
1.js里的返回问题
<a href="javascript:history.back();" class="btn twoBtn">返回</a>
2.判断后端传过来的数据是否为空
jQuery.isEmptyObject(data);
3.下拉框
下拉框的联动实现,参考:https://blog.csdn.net/vicoll/article/details/78015360
下拉框的基本用法,参考:https://zhidao.baidu.com/question/1691278356311298508.html
通过js加载下拉框的选择数据:
<select id="account" name="ctripAccount" style="height: 35px; vertical-align: middle; line-height: 40px;">
<option value="">选择账号</option>
</select>
<%--通过js加载下拉框数据 --%>
<script type="text/javascript">
var list = result.data.list;
if(list && 0 < list.length) {
for (var i = 0; i < list.length; i++) {
$('#account').append("<option value='" + list[i].corpId + "'>"+ list[i].corpId +"</option>");
}
}
</script>
六、初始页面时加载方法。
1.$(window).load(function(){})
一般放在页面的开始
2.onload="method()"
可用于某个标签里
3.$(document).ready(function(){})
一般放在页面的最下方
七、按回车触发事件。
var event = arguments.callee.caller.arguments[0] || window.event;
if(event.keyCode == 13){//判断是否按了回车,enter的keycode代码是13。
loadPager(1);
}
八、请求之后。
1.刷新页面: location.reload(true);
2.请求成功后有确认信息:
success:function(result) {
_alert("成功","提交成功",{
'ok':function(){
document.location.href = url;
},
});
}
url:为成功之后跳转的页面。
第三章程(12)
一、随机生成加密的Id。
String id= UUID.randomUUID().toString().replace("-", "").toLowerCase();
二、获取当前用户。
1.action请求:
HttpServletRequest request = ServletActionContext.getRequest();
UserInfoVO userInfo = WxqyhAppContext.getCurrentUser(request);
if (userInfo == null) {
setActionResult("1001",ErrorTip.USER_ID_NULL.toString());
return ;
}
2.jsp:
<%
UserInfoVO userInfo = WxqyhAppContext.getCurrentUser(request);
String userName = "";
if(userInfo != null){
userName = userInfo.getPersonName();
}
%>
三、计算一个程序耗时多少。
第一种:以毫秒为单位计算的。
//下面是一些测试代码
long startTime=System.currentTimeMillis();
for(int i=0;i<10000;i++){
System.out.println("当前是:"+i);
}
long endTime=System.currentTimeMillis();
System.out.println("当前程序耗时:"+(endTime-startTime)+"ms");
第二种:以纳秒为单位计算的。
//下面是测试代码
long startTime=System.nanoTime();
for(int i=0;i<10000;i++){
System.out.println("当前是:"+i);
}
long endTime=System.nanoTime();
System.out.println("当前程序耗时:"+(endTime-startTime)+"ns");
第一种测试程序是一般精确时间,第二种为高精确时间。
时间换算:
1小时=60分钟
1分钟=60秒
1秒=1000毫秒
1毫秒=1000微秒
1微秒=1000纳秒
1纳秒=1000皮秒
四、js实现小数点后两位。
1.toFixed保留两位小数
var num1 = 55.3715;
console.log(num1.toFixed(2));//保留两位小数
var num2 = 55.3755;
console.log(num2.toFixed(2));//可四舍五入为55.38
var num3 = 55.3;
console.log(num3.toFixed(2));//可自动补位为55.30
var num5 = 55;
console.log(num5.toFixed(2));//将整数自动补位为两位小数55.00
2.substr直接按字符串截取
var num1 = 55.3785 + "";
console.log("substr方式保留两位小数:"+num1.substr(0,num1.indexOf(".")+3));
//直接按位截取,没有四舍五入,没有补位,结果为55.37
3.浮点数四舍五入和补位
var num1 = parseFloat(55.7856);
var num2 = parseFloat(55);
if (!isNaN(num1)) {
num1 = Math.round(num1*100)/100;
console.log("将浮点数四舍五入,取小数点后2位:"+num1);
//结果为55.79
var rs = str.indexOf('.');
if (rs < 0) {
rs = str.length;
str += '.';
}
while (str.length <= rs + 2) {
str += '0';
}
}
console.log("将浮点数四舍五入,取小数点后2位,位数不够进行补位:"+str);
//结果为55.00
五、字符串,集合,数组之间的转换。
详情可参考:https://blog.csdn.net/ymaini/article/details/80720067
六、input输入框的实时更新检验。
以重命名文件为例:
<input type="text" id="foldername" placeholder="请输入文件夹名" value="'+name+'" style="margin:8px 0;width:100%;padding:11px 8px;font-size:15px; border:1px solid #999;"/>
//specialCheck 输入框里还有提示时为false
var changeTimeOut;
$("#foldername").off('keyup').on('keyup', function(){
clearTimeout(changeTimeOut);
changeTimeOut = setTimeout(function () {
if(include($("#foldername").val())){
if(0 == $("#specialStr").length) {
$("#foldername").after('<span id="specialStr" >您输入的格式有误,文件名不能包含特殊字符:? \\ * | " < > : /,请重新输入!</span>')
}else{
$("#specialStr").show();
specialCheck = false;
}
}else{
$("#specialStr").hide();
specialCheck = true;
}
}, 300);
});
七、JQuery的组建弹框。
组建弹框预览: ftp://wmyao.cn/www/JQuery/dialog/index.html
组建弹框下载地址:(JQuery库也有)dist文件夹+index.html文件
ftp://wmyao.cn/www/JQuery/dialog
第四章程(01)
一、双日历插件。
基于jQuery: http://www.jq22.com/jquery-info3814
基于Bootstrap: http://www.jq22.com/jquery-info1087
二、适配器:(界面初始加载)。
界面初始加载适配器:比如某个功能为本人时才能显示,好比csdn文章的编辑功能。编辑按钮的显示如下:定义原来的样式为不可见,hide或者display为none;
window.onresize = function(){
mobilStyleAdapter();
}
var fth = $(".qw-folder-top").height();//某个地方的高度
function mobilStyleAdapter(){
var code=getParam("appCode");//获取URL中某个参数的值
if(code=="personalTicket"){//满足条件的时候显示目标(好比是csdn为本人查看博客时,应有编辑按钮显示)
if(450 > $("body").width()){//当屏幕宽满足条件(手机端和pc)
$("#renameFile").css({"display": "block", "margin": "10px 0"});//目标的id,即编辑按钮的id
$(".qw-folder-top").css({"height": (fth + 28)});//目标的样式,即编辑按钮的样式
}else{
$("#renameFile").css({"display": "inline", "marginTop": "0"});
$(".qw-folder-top").css({"height": "inherit"});
}
}
}
三、Enter按键。
$('#id').keydown(function(e){//id为某个输入框的id
if(e.keyCode==13){//判断是否按下enter键
enterSearch();//执行按下enter键后执行的方法
}
});
四、获取当前浏览器的版本号。
1.js中获取浏览器的版本号
// js中获取浏览器的版本号
var appVersion = navigator.appVersion; //浏览器的版本号
var lang = appVersion.substr(appVersion.lastIndexOf("/") + 1, appVersion.length);
console.log("浏览器的语言版本 (Language version of browser):"+lang);
if (lang == "en"){
window.location.replace('${baseURL}/jsp/wap/sap/list_en.jsp?type=${param.type}&corp_id=${param.corp_id}');
}else{
window.location.replace('${baseURL}/jsp/wap/sap/list.jsp?type=${param.type}&corp_id=${param.corp_id}');//中文编码时打开链接
}
2.action后台获取浏览器的版本
//action后台获取浏览器的版本
public void getAcceptLanguage() {
HttpServletRequest request = ServletActionContext.getRequest();
addJsonObj("acceptLanguage", request.getHeader("accept-language"));
}
第五章程(02-03)
一、Js数组去重。
参考链接:https://www.jb51.net/article/118657.htm
二、Redis闪退启动问题。
参考链接:https://blog.csdn.net/qq_38317491/article/details/79685309
三、Shiro。
1、Shiro与Spring Security比较
Apache Shiro | Spring Security |
---|---|
简单、灵活 | 复杂、笨重 |
可脱离Spring | 不可脱离Spring |
粒度较粗 | 粒度更细 |
2、Shiro认证
构建SecurityManager环境:
DefaultSecurityManager defaultSecurityManager=new DefaultSecurityManager ();
defaultSecurityManager.setRealm()
3、Shiro授权
四、MySQL。
SQL:Structured Query Language结构化查询语言,一种特殊编程语言
1.数据库分类(运行环境):
网络数据库:把数据技术引入到计算机网络系统中,借助成熟的网络技术
层级数据库:一个有根节点的定向有序树
关系数据库:建立在关系模型基础上的数据库,集合代数等数学概念和方法处理数据
2.数据库的另外一种区分:存储介质(磁盘和内存)
关系型数据库:存储在磁盘中
非关系型数据库:内存
3.关系模型:
关系数据结构:以二维表的形式存储
关系操作集合:关联、管理存储的数据,SQL指令
关系完整性约束:数据内部的关联关系,数据与数据之间的关联关系
4、典型关系型数据库
小型关系型数据库:Microsoft Access,SQLite
中型:Microsoft SQL Server,Mysql------开源,免费
大型:Oracle,DB2------IDM提出,使用
Mysql与Oracle一个公司:隶属于Oracle。
5.查看系统变量:select @@autocommit;
6.修改系统变量:
会话修改变量:set autocommit=0;
全局修改变量:set global autocommit=0;
set @@global.autocommit=2;
(只针对新连接的客户生效)
五、Linux。
1.Linux操作系统分为内核版和发行版。
2.toolbar.netcraft.com----看网站后台的服务器,操作系统
3.linux系统主要分debian系和redhat系,还有其它自由的发布版本。
debian系主要有Debian,Ubuntu,Mint等及其衍生版本;
redhat系主要有RedHat,Fedora,CentOs等,
其它有Slackware,Gentoo,Arch linux,LFS,SUSE等。
如果开发用,推荐redhat系,业内公司的服务器多用centos,
平时使用,就选择fedora,可以选择最新的发行版。
如果简单用加开发,可以选择debian系,推ubuntu,mint。
如果是技术狂型,那么就推荐Gentoo,Arch linux,LFS,Slackware等。
不过视频讲课用的都是centos
4.Linux严格区分大小写
Linux中的内容以文件形式保存,包括硬件(一切内容皆文件)
Linux中没有扩展名:
压缩包:.gz .bz2 .tar.bz2 .tgz
二进制压缩包:.rpm
网页文件:.html .php
脚本文件:.sh
配置文件:.conf
5.Windows下的程序不能直接在Linux中安装和运行
6.字符界面:占用系统资源少,操作系统更稳定
7.http://www.vmware.com
建议的配置(虚拟机最低配置:CPU 1GHz,内存:1GB,硬盘:8GB)
安装完虚拟机,需要安装centos,虚拟机的内存最少628M
真实机需要在2GB以上
8.快照:记录虚拟机当前的状态,将虚拟机玩坏了以后,可以恢复到快照状态
9.给虚拟机分配的内存,不能超过真机内存的一半
10.Windows:分区、格式化、给盘符,就可以进行使用了
Windows分完区以后,就可以通过自带的图形界面,直观的看到分区的结果,格式化、分配盘符。而Linux中刚开始没有图形界面,这个时候需要给分区分配盘符,没有这样的图形界面,无法确定给哪一个分配,因此需要事先给每分区起一个文件名,才可以给盘符,才能使用
Linux:分区、格式化、给每一个分区起一个设备文件名、分配盘符
11.逻辑分区从5开始(即使没有3、4)
主分区1、2、3、4
12.swap:虚拟内存。当真实内存不够用时,可以拿swap分区中的硬盘空间当内存来使用
真实机内存<=4GB,swap分区的大小为内存的2倍
真实机内存>4GB,swap分区和内存一样大即可
13.在linux中没有盘符的说法,应该叫挂载点
14.分区:把大硬盘分为小的逻辑分区:主分区,扩展分区,逻辑分区
格式化:写入文件系统
分区设备文件名:给每个分区定义设备文件名
挂载:给每个分区分配挂载点
六、WebService。
WebService:一种跨编程语言和跨操作系统平台的远程调用技术,不同系统之前的交互和数据传递。
WebService规范:JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS
三要素
http://www.webxml.com.cn/zh_cn/index.aspx
相关文章
- 暂无相关文章
用户点评