首页 文章 精选 留言 我的

精选列表

搜索[个人知识库],共10005篇文章
优秀的个人博客,低调大师

教你搭建个人/企业私有云盘-kodexplorer

环境说明: 系统版本:CentOS 6.9 x86_64 软件版本:nginx-1.12.2php-5.5.38 可道云kodexplorer4.37 1、nginx的编译安装 1.1 创建目录mkdir -p /service/toolsmkdir /applicationcd /service/toolswget http://nginx.org/download/nginx-1.12.2.tar.gz 下载或者上传nginx包 1.2 解压tar zxvf nginx-1.12.2.tar.gz 1.3 编译安装yum install gcc gcc-c++ glibc -y #安装编译器yum install pcre-devel zlib-devel openssl-devel –y 装pcre为了重写rewrite提供正则表达式库,装zlib为了gzip提供数据压缩用的函数库,装openssl为 Nginx 模块(如 ssl )提供密码算法、证书以及 SSL 协议等功能C语言源码包,需要编译才能使用编译安装三部曲 ./configure(指定编译参数:安装目录及版本) cd nginx-1.12.2 ./configure --prefix=/application/nginx-1.12.2 --pid-path=/var/run/nginx.pid --user=nginx --group=nginx --with-http_ssl_module ./configure -help #查看帮助 生成Makefile文件makemake是用来编译的,它从Makefile中读取指令,然后编译 cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \ -o objs/src/http/modules/ngx_http_geo_module.o \ src/http/modules/ngx_http_geo_module.c make installmake install是用来安装的,它也从Makefile中读取指令,安装到指定的位置 [root@Web01 nginx-1.12.2]# cd /application/nginx-1.12.2/ [root@Web01 nginx1.12.2]# ls -1 conf #配置文件 html #网站html文件 logs #日志 sbin #二进制的执行文件 1.4 配置 创建软链接 ln -s /application/nginx-1.12.2 /application/nginx ln -s /application/nginx/sbin/nginx /usr/bin/ useradd -M -s /sbin/nologin -r -u 88 nginx #创建用户 -M 不创建用户的HOME目录 -s shell 指定默认登录shell -r 创建系统账户 -u uid 为账户指定一个唯一的UID conf目录 fastcgi.conf 配合php uwsgi_params 配合python nginx.conf 主配置文件 mime.types 多媒体资源类型配置文件 最小化配置文件 grep -Ev '^$|#' nginx.conf.default >nginx.conf [root@Web01 conf]# grep -Ev '^$|#' nginx.conf.default >nginx.conf [root@Web01 conf]# cat nginx.conf worker_processes 1; #工作进程数 events { #event模块 worker_connections 1024; #默认工作连接数 } http { #http模块,nginx核心模块 include mime.types; #加载的多媒体资源类型配置文件 default_type application/octet-stream; #默认类型(16进制) sendfile on; #优化配置选项 keepalive_timeout 65; #长连接超时时间65秒 server { listen 80; #默认监听的端口 server_name localhost; #网站域名 location / { #网站站点根目录位置 root html; #网站文件 index index.html index.htm; #网站首页 } error_page 500 502 503 504 /50x.html; #错误页面500,502.503.504返回50x.html location = /50x.html { root html; } } } 1.5 启动 /application/nginx/sbin/nginx –t #语法检查并测试 /application/nginx/sbin/nginx #启动 /application/nginx/sbin/nginx -s reload #平滑重启,不影响用户访问 /application/nginx/sbin/nginx -s stop #关闭 /application/nginx/sbin/nginx -V #查看版本及安装的模块 启动后会生成几个temp目录浏览器访问 编译安装Nginx完成 2、编译安装php 2.1下载并安装相关编译器mkdir -p /service/tools #创建目录 cd /service/tools/ wget http://mirrors.sohu.com/php/php-5.5.38.tar.gz #下载包 tar xf php-5.5.38.tar.gz #解压 yum install gcc gcc-c++ glibc -y #安装编译器,如果已经编译安装了nginx则不需要此步骤 yum install -y libxml2-devel curl curl-devel libjpeg-devel libpng-devel freetype-devel 安装编译时所需库 cd php-5.5.38 #进入php-5.5.38目录 2.2 编译安装编译生成makefile** ./configure --prefix=/application/php-5.5.38 --with-jpeg-dir=/usr/lib64 --with-freetype-dir=/usr/lib64/ --with-curl --enable-fpm --enable-mbstring --with-gd --with-fpm-user=nginx --with-fpm-group=nginx make && make install 3、配置 [root@Web02 php-5.5.38]# ln -s /application/php-5.5.38 /application/php #创建软链接 [root@Web02 php-5.5.38]# ln -s /application/php/bin/* /usr/bin/ #创建命令软链接 [root@Web02 php-5.5.38]# cp php.ini-production /application/php-5.5.38/etc/php.ini 拷贝默认配置文件 [root@Web02 php-5.5.38]# cp /application/php-5.5.38/etc/php-fpm.conf.default /application/php-5.5.38/etc/php-fpm.conf 拷贝默认php-fpm配置文件,php-fpm 启动进程数 4、启动 [root@Web02 php-5.5.38]# /application/php/sbin/php-fpm #启动php [root@Web02 php-5.5.38]# netstat -lntup|grep 9000 #查看进程9000端口 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 97399/php-fpm 5、配置nginx使其支持php 查看nginx.conf.default有关php的部分(65-71行),将此内容添加到nginx.conf中,并修改fastcgi_param指定script文件名documentrootdocumentrootfastcgi_script_name可以在/application/nginx/conf/fastcgi.conf查看 65 #location ~ \.php$ { 66 # root html; 67 # fastcgi_pass 127.0.0.1:9000; 68 # fastcgi_index index.php; 69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 70 # include fastcgi_params; 71 #} [root@Web02 php-5.5.38]# cd /application/nginx/conf/ [root@Web02 conf]# vim nginx.conf server { listen 80; server_name localhost; index index.php index.html index.htm; location / { root html; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME documentrootdocumentrootfastcgi_script_name; include fastcgi_params; } } } 这个配置的意思是 在浏览器中访问的.php文件,实际读取的是 $document_root(网站根目录)下的.php文件 -- 也就是说当访问127.0.0.1/index.php的时候,需要读取网站根目录下面的index.php文件,如果没有配置这一配置项时,nginx不回去网站根目录下访问.php文件,所以返回空白 配置项目中:include fastcgi_params; fastcgi_params 文件中含有各个nginx常量的定义,默认情况 SCRIPT_FILENAME = /scripts$fastcgi_script_name检查语法nginx -t 6、配置网盘,下载解压可道云kodexplorer [root@Web02 conf]# cd ../html/ #进入到站点目录 [root@Web02 html]# ls 50x.html index.html [root@Web02 html]# rm -rf * #删除原有的站点文件 [root@Web02 html]# wget http://static.kodcloud.com/update/download/kodexplorer4.37.zip 下载 [root@Web02 html]# unzip kodexplorer4.37.zip #解压 [root@Web02 html]# nginx #启动nginx 浏览器访问 根据提示操作 su -c 'setenforce 0' #关闭selinux,su -c 指定命令,用root执行 chmod -R 777 /var/www/html/ #按照提示修改权限 刷新页面重新访问,成功,设置管理员用户名和密码,进行登录及后续图形界面操作

优秀的个人博客,低调大师

Java个人知识点总结(基础篇)

基础篇 JDK常用的包 java.lang:这个是系统的基础类,比如String、Math、Integer、System和Thread, 提供常用功能。 java.io:这里面是所有输入输出有关的类,比如文件操作等 java.net:这里面是与网络有关的类,比如URL,URLConnection等。 java.util:这个是系统辅助类,特别是集合类Collection,List,Map等。 java.sql:这个是数据库操作的类,Connection, Statememt,ResultSet等 Get和Post的区别 1.get是从服务器上获取数据,post是向服务器传送数据, 2.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。 3.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。 4.在进行文件上传时只能使用post而不能是get。 Java多态的具体体现 面向对象编程有四个特征:抽象,封装,继承,多态。 多态有四种体现形式: 1. 接口和接口的继承。 2. 类和类的继承。 3. 重载。 4. 重写。 其中重载和重写为核心。 重载:重载发生在同一个类中,在该类中如果存在多个同名方 法,但是方法的参数类型和个数不一样,那么说明该方法被重 载了。 重写:重写发生在子类继承父类的关系中,父类中的方法被子 类继承,方法名,返回值类型,参数完全一样,但是方法体不 一样,那么说明父类中的该方法被子类重写了。 StringBuffer StringBuilder String区别 √ String字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBuilder字符串变量 可变 非线程安全 字符串拼接直接在字符串后追加 1.StringBuilder执行效率高于StringBuffer高于String. 2.String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象, StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方 法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer 是 线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率 高于 StringBuffer. 3.对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder. Stringbuilder 执行效率要高于stringbuffer更高于string String是变量 是不可变的 所以在在+ = 赋值的时候创建新的对象 Stringbuffer stringbuilder俩个都是可变的,当在字符串拼接的时候可以采用appent方法,在原有的基础上追加,所以性能比string 更高 ,又因为stringbuffer是现成安全的 but stringbuilder是线程非安全的 所以 stringbuilder比stringbuffer效率更低 对于大数据字符串拼接可以采用stringbuffter或是 stringbuilder Hashtable与HashMap的区别 √ HashMap不是线程安全的,HashTable是线程安全。 HashMap允许空(null)的键和值(key),HashTable则不允许。 HashMap性能优于Hashtable。 Map 1.Map是一个以键值对存储的接口。Map下有两个具体的实现,分别是HashMap和HashTable. 2.HashMap是线程非安全的,HashTable是线程安全的,所以HashMap的效率高于HashTable. 3.HashMap允许键或值为空,而HashTable不允许键或值为空. Map是一个键值的存储接口 , map下还有俩个实现分别是 hashmap 和 hashtable Hashmap线程非安全的 hashtable是线程安全的 所以hashmap要比hashtable效率要高 Hashmap允许键值 为空 但是 hashtable不允许为空 九大隐式对象 输入/输出对象: request response out 作用域通信对象:session application pageContext Servlet对象: page config 错误对象:exception Forword(请求转发)与Redirect(重定向) 1、从数据共享上 Forword是一个请求的延续,可以共享request的数据 Redirect开启一个新的请求,不可以共享request的数据 2、从地址栏 Forword转发地址栏不发生变化 Redirect转发地址栏发生变化 八、JQurey总结 jquery是一个轻量级的js框架,具有跨浏览器的特性,兼容性好, 并且封装了很多工具,方便使用。 常用的有:选择器 ,dom操作 ,ajax(ajax不能跨域) ,特效,工具类 XML和Json的特点 Xml特点: 1、有且只有一个根节点; 2、数据传输的载体 3、所有的标签都需要自定义 4、是纯文本文件 Json(JavaScript Object Notation)特点: json分为两种格式: json对象(就是在{}中存储键值对,键和值之间用冒号分隔, 键值对之间用逗号分隔); json数组(就是[]中存储多个json对象,json对象之间用逗号分隔) (两者间可以进行相互嵌套)数据传输的载体之一 区别: 传输同样格式的数据,xml需要使用更多的字符进行描述, 流行的是基于json的数据传输。 xml的层次结构比json更清晰。 共同点: xml和json都是数据传输的载体,并且具有跨平台跨语言的特性。 request.getSession()、reqeust.getSession(false)和request.getSession(true) getSession()/getSession(true):当session存在时返回该session,否则新建一个session并返回该对象 getSession(false):当session存在时返回该session,否则返回null Page和PageContext的区别 Page是servlet对象;使用this关键字,它的作用范围是在同一页面。 PageContext是作用域通信对象;通常使用setAttribute()和getAttribute()来设置和获取存放对象的值。 Ajax总结 AJAX全称: 异步JavaScript及 XML(Asynchronous JavaScript And XML) Ajax的核心是JavaScript对象XmlHttpRequest(XHR)。 Ajax的优点: 提高用户体验度(UE) 提高应用程序的性能 进行局部刷新 AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。 2.通过 AJAX,我们的 JavaScript 可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,我们的 JavaScript 可在不重载页面的情况与Web服务器交换数据,即可局部刷新。 3. AJAX在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面,减轻服务器的负担,提升站点的性能。 AJAX可使因特网应用程序更小、更快,更友好,用户体验(UE)好。 5. Ajax是基于标准化并被广泛支持的技术,并且不需要插件和下载小程序 JSP9大隐视对象中四个作用域的大小与作用范围 四个作用域从大到小:appliaction>session>request>page application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。 session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。 request:请求作用域,就是客户端的一次请求。 page:一个JSP页面。 以上作用范围使越来越小,request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward)。 List,Set,Collection,Collections √ [if !supportLists]1.[endif]List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合。Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。 2.List接口实现类有ArrayList,LinkedList,Vector。ArrayList和Vector是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。又因为Vector是线程安全的,所以他和ArrayList相比而言,查询效率要低。 List和set都属于接口 他们都继承于collection List是一个有序的 可重复的 set是无序得到不可重复的 Collection是集合的顶层接口 , collections是封装可众多集合的操作的静态的工具类 因为他是私有化的所以他不可以实例化 List的接口实现类分为arraylist vertor linkedlist arraylist 和 verson是基于数组实现的,说以查询的时候较快 ,但是增加 与删除 的速度较慢。 Linkelist是基于链式存储 ,所以查询的时候较慢, 增加与删除数独较快, 又因为vertor线程安全 所以arraylist相比 效率 如果你依然觉得有些茫然,不如加入我的Java架构师之路:766529531 跟有多年Java开发经验的资深工程师聊一聊。也可获取免费的视频学习资料以及电子书学习资料喔! java的基本数据类型 数据类型 大小 byte(字节) 1(8位) shot(短整型) 2(16位) int(整型) 4(32位) long(长整型) 8(32位) float(浮点型) 4(32位) double(双精度) 8(64位) char(字符型) 2(16位) boolean(布尔型) 1位 附加: String是基本数据类型吗?(String不是基本数据类型) String的长度是多少,有限制?(长度受内存大小的影响) 冒泡排序 public class Sort { public static void sort() { Scanner input = new Scanner(System.in); int sort[] = new int[10]; int temp; System.out.println("请输入10个排序的数据:"); for (int i = 0; i < sort.length; i++) { sort[i] = input.nextInt(); } for (int i = 0; i < sort.length - 1; i++) { for (int j = 0; j < sort.length - i - 1; j++) { if (sort[j] < sort[j + 1]) { temp = sort[j]; sort[j] = sort[j + 1]; sort[j + 1] = temp; } } } System.out.println("排列后的顺序为:"); for(int i=0;i<sort.length;i++){ System.out.print(sort[i]+" "); } } public static void main(String[] args) { sort(); } } 二分查找法 十八、时间类型转换 public class DateFormat { public static void fun() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); String newDate; try { newDate = sdf.format(new SimpleDateFormat("yyyyMMdd") .parse("20121115")); System.out.println(newDate); } catch (ParseException e) { e.printStackTrace(); } } public static void main(String args[]) { fun(); } } 阶乘 public class Multiply { public static int multiply(int num) { if (num < 0) { System.out.println("请输入大于0的数!"); return -1; } else if (num == 0 || num == 1) { return 1; } else { return multiply(num - 1) * num; } } public static void main(String[] args) { System.out.println(multiply(10)); } } UE和UI的区别 UE是用户体验度 UI界面原型(用户界面)(相当于买房时用的模型) 设计UI的作用: 1、帮助程序员工作(界面已由美工设计完成) 2、提前让用户对项目有个宏观的了解,知道效果是什么样子。 osi七层模型 第一层:物理层 第二层:数据链路层 第三层:网络层 第四层:传输层 第五层:会话层 第六层:表示层 第七层:应用层 线程和进程的区别 1.线程(Thread)与进程(Process) 进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。 如果你依然觉得有些茫然,不如加入我的Java架构师之路:766529531跟有多年Java开发经验的资深工程师聊一聊。也可获取免费的视频学习资料以及电子书学习资料喔! 1、一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。 2、实现线程的两种方式:继承Thread类,实现Runable接口 jvm的内存结构 1、java虚拟机的内存结构分为堆(heap)和栈(stack),堆里面存放是对象实例也就是new出来的对象。栈里面存放的是基本数据类型以及引用数据类型的地址。 2、对于所谓的常量是存储在方法区的常量池里面。 内存泄露和内存溢出 内存泄露(memory leak),是指应用程序在申请内存后, 无法释放已经申请的内存空间.一次内存泄露危害可以忽略, 但如果任其发展最终会导致内存溢出(out of memory). 如读取文件后流要进行及时的关闭以及对数据库连接的释放。 内存溢出(out of memory)是指应用程序在申请内存时, 没有足够的内存空间供其使用。 如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。 单例 单例就是该类只能返回一个实例。 单例所具备的特点: 1.私有化的构造函数 2.私有的静态的全局变量 3.公有的静态的方法 单例分为懒汉式、饿汉式和双层锁式 饿汉式: public class Singleton1 { private Singleton1() {}; private static Singleton1 single = new Singleton1(); public static Singleton1 getInstance() { return single; } } 懒汉式: public class Singleton2 { private Singleton2() {} private static Singleton2 single=null; public tatic Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; } } 线程安全: public class Singleton3 { private Singleton3() {} private static Singleton3 single ; public static Singleton3 getInstance() { if(null == single){ synchronized(single ){ if(null == single){ single = new Singleton3(); } } } return single; } } 参考: 通过双重判断来保证单列设计模式在多线程中的安全性, 并且它在性能方面提高了很多。 synchronized在方法上加锁 (同步锁) synchronized在代码块内部加锁 (同步代码块) synchronized(同步锁) 使用synchronized如何解决线程安全的问题? 1.synchronized在方法上加锁 2.synchronized在代码块内部加锁 1.懒汉 2.饿汉 3.双重判断 解析xml文件的几种技术 1、 解析xml的几种技术 1.dom4j 2.sax 3.jaxb 4.jdom 5.dom 1.dom4j dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。 2.sax SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。 3.jaxb JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。 2、dom4j 与 sax 之间的对比:【注:必须掌握!】 dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出, sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml 也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性 所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j 如果你依然觉得有些茫然,不如加入我的Java架构师之路:766529531跟有多年Java开发经验的资深工程师聊一聊。也可获取免费的视频学习资料以及电子书学习资料喔! 项目的生命周期 1.需求分析 2.概要设计 3.详细设计(用例图,流程图,类图) 4.数据库设计(powerdesigner) 5.代码开发(编写) 6.单元测试(junit 白盒测试)(开发人员) svn版本管理工具(提交,更新代码,文档) 7.集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试)) 8.上线试运行 (用户自己体验) 9.压力测试(loadrunner) 10.正式上线 11.维护 OSCache的判断 Object obj = CacheManager.getInstance().getObj("oaBrandList"); //从缓存中取数据 if (null == obj) { obj = brandDao.getBrandList(); //如果为空再从数据库获取数据 //获取之后放入缓存中 CacheManager.getInstance().putObj("oaBrandList", obj); } return (List<OaBrand>)obj; 经常访问的技术网站 1.csdn(详细步骤的描述) 2.iteye(详细步骤的描述) 3.oschina(开源中国获取java开源方面的信息技术) 4.java开源大全 www.open-open.com(获取java开源方面的信息技术) 5.infoq(对java,php,.net等这些语言的一些最新消息的报道) 项目团队中交流的工具 飞秋(局域网) qq(局域网,外网) RTX(局域网,外网) 邮箱(局域网,外网) 平时浏览的书籍 实战经验: *** in action(实战) ***深入浅出 ***入门指南 思想基础: 大话设计模式 重构 java Exception体系结构 java异常是程序运行过程中出现的错误。Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中定义了许多异常类,分为两大类,错误Error和异常Exception。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常(非runtimeException),也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。 1、Error与Exception Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。 这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。 Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。 2、运行时异常和非运行时异常 运行时异常:都是RuntimeException类及其子类异常: IndexOutOfBoundsException索引越界异常 ArithmeticException:数学计算异常 NullPointerException:空指针异常 ArrayOutOfBoundsException:数组索引越界异常 ClassNotFoundException:类文件未找到异常 ClassCastException:造型异常(类型转换异常) 这些异常是不检查异常(Unchecked Exception),程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。 非运行时异常:是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如: IOException、文件读写异常 FileNotFoundException:文件未找到异常 EOFException:读写文件尾异常 MalformedURLException:URL格式错误异常 SocketException:Socket异常 SQLException:SQL数据库异常 session和cookie的区别 session是存储在服务器端,cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。又由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,会话cookie确切的说是存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。那么,session在什么情况下丢失,就是在服务器关闭的时候,或者是sessio过期,再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用session.getsession来创建,这就是session与cookie的区别 字节流与字符流的区别 stream结尾都是字节流,reader和writer结尾都是字符流 两者的区别就是读写的时候一个是按字节读写,一个是按字符。 实际使用通常差不多。 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。 final,finally,finalize三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变 量的时候给它赋值 当final修饰方法时,该方法不能被重写 当final修饰类时,该类不能被继承 Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方 法时,这个抽象类也就没有了它存在的必要) Final不能修饰接口,因为接口中有需要其实现类来实现的方法 Finally: Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行,并且会在return,continue,break关键字之前执行 finalize: Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC(garbage collector垃圾回收)运行机制的一部分,finalize()方法是在GC清理它所从属的对象时被调用的 Io流的层次结构 从流的方向 输入流 输出流 从流的类型上 字符流字节流 inputstream和outputstream都是抽象类 它们下面的实现包括 FileInputStream,BufferedInputStream FileOutputStream,BufferedOutputStream reader和 writer FileReader,BufferedReader,StringReader FileWriter,BufferedWriter,StringWriter,PrintWriter JAVA: Java是面向对象的,跨平台的,它通过java虚拟机来进行跨平台操作,它可以进行自动垃圾回收的【c语言是通过人工进行垃圾回收】,java还会进行自动分配内存。【c语言是通过指定进行分配内存的】,只需要new一个对象,这个对象占用了多少空间,不需要我们来管,java虚拟机负责管这些,用完之后也不需要我们来释放,java虚拟机会自动释放 JavaSE JavaEE JavaME区别 是什么: Java SE=Java Standard Edition=j2se = java 标准版 Java EE=Java Enterprise Edition=j2ee= java 企业版 Java ME=Java Mobile Edition=j2me = java移动版 特点: SE主要用于桌面程序(swing),控制台开发(main程序)。 EE企业级开发(JSP,EJB,Spring MVC,Struts,hibernate,ibatis等), 用于企业级软件开发,网络开发,web开发。 ME嵌入式开发(手机,小家电,PDA)。[苹果的ios,黑莓] 三者之间的关系: Java SE(Java Platform, Standard Edition,Java标准版)就是基于JDK和JRE的。 Java SE为Java EE提供了基础。 Java EE除了基于我们这个所谓的Java SE外,还新加了企业应用所需的类库 JDK JRE JVM的区别: Jdk【Java Development ToolKit】就是java开发工具箱, JDK是整个JAVA的核心里边包含了jre,它除了包含jre之外还包含了一些javac的工具类,把java源文件编译成class文件,java文件是用来运行这个程序的,除此之外,里边还包含了java源生的API,java.lang.integer在rt的jar包里边【可以在项目中看到】,通过rt这个jar包来调用我们的这些io流写入写出等 JDK有以下三种版本: J2SE,standard edition,标准版,是我们通常用的一个版本 J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序 J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序 Jre【Java Runtime Enviromental】是java运行时环境,那么所谓的java运行时环境,就是为了保证java程序能够运行时,所必备的一基础环境,也就是它只是保证java程序运行的,不能用来开发,而jdk才是用来开发的,所有的Java程序都要在JRE下才能运行。 包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。 Jre里边包含jvm Jvm:【Java Virtual Mechinal】因为jre是java运行时环境,java运行靠什么运行,而底层就是依赖于jvm,即java虚拟机,java虚拟机用来加载类文件,java中之所以有跨平台的作用,就是因为我们的jvm 关系: J2se是基于jdk和jre, JDK是整个JAVA的核心里边包含了jre, Jre里边包含jvm 报错的状态码: 301 永久重定向 302 临时重定向 304 服务端 未改变 403 访问无权限 200 正常 404 路径 500 内部错误 协议以及默认的端口号 ftp 21 文件传输协议 Pop3 110 它是因特网 <http://baike.baidu.com/view/1706.htm>电子邮件 <http://baike.baidu.com/view/1524.htm>的第一个离线 <http://baike.baidu.com/view/113466.htm>协议标准 Smtp 25 简单邮件传输协议 http 80 超文本传输协议 oracle 默认端口号1521 mysql默认端口号 3306 抽象类与接口的区别 1.一个类只能进行单继承,但可以实现多个接口。 2.有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法; 接口里面所有的方法的默认修饰符为publicabstract,接口里的成员变量默认的修饰符为pulbic static final。 关系: 接口和接口继承 接口和抽象类抽象类实现接口 类和抽象类类继承抽象类 类和类继承 修饰符的作用 修饰符的作用范围: private default protected public 同一个类中可以 可以 可以 可以 同一个包的类中 可以可以 可以 不同包的子类中 可以可以 不同包的类中 可以 onready和onload的区别 1.onready比onload先执行 2.onready是在页面解析完成之后执行,而onload是在页面所有元素加载后执行 3.onload只执行最后一个而onready可以执行多个。 参考: [if !supportLists]1.[endif]执行时间window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。 $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。 2.编写个数不同 window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个 $(document).ready()可以同时编写多个,并且都可以得到执行 3.简化写法 window.onload没有简化写法 $(document).ready(function(){})可以简写成$(function(){}); 另外,需要注意一点,由于在$(document).ready() 方法内注册的事件,只要DOM 就绪就会被执行,因此可能此时元素的关联文件未下载完。例如与图片有关的html 下载完毕,并且已经解析为DOM 树了,但很有可能图片还没有加载完毕,所以例如图片的高度和宽度这样的属性此时不一定有效。要解决这个问题,可以使用Jquery 中另一个关于页面加载的方法---load() 方法。Load() 方法会在元素的onload 事件中绑定一个处理函数。如果处理函数绑定给window 对象,则会在所有内容( 包括窗口、框架、对象和图像等) 加载完毕后触发,如果处理函数绑定在元素上,则会在元素的内容加载完毕后触发。 Jquery 代码如下: $(window).load(function (){ // 编写代码 });等价于JavaScript 中的以下代码 Window.onload = function (){ // 编写代码 } switch默认接受的几种数据类型 Short, int, byte, char request 跟session的区别 1.他们的生命周期不同, request对应的是一次请求, session对应的是一次会话 2.request占用资源比较少,相对来说缺乏持续性, 而session资源消耗比较大,所以通常使用request来保存信息 找到解决svn冲突方法 对于svn冲突,可以采用手工处理将冲突的部分进行整合, 之后备份最新整合后的文件,采用覆盖更新的方式处理完 冲突之后,再把最新整合后的文件进行提交。 如果你依然觉得有些茫然,不如加入我的Java架构师之路:766529531跟有多年Java开发经验的资深工程师聊一聊。也可获取免费的视频学习资料以及电子书学习资料喔! 反射的描述 通过字符串可以动态创建java对象,并且可以动态访问方法, 属性等。 我们在项目中的时候封装过数据库jdbc的持久层, 其中就利用反射这项 技术来达到通用 和灵活的目的。

优秀的个人博客,低调大师

从个人docker_hub上传_下载镜像

flyer520对docker镜像下载和上传实例: 第1步,注册docker-hub账号。在https://hub.docker.com/网站注册。 注:我的账号是flyer520,邮箱12700696@qq.com 第2步,linux登录docker测试。 我的账号:dockerlogin --username=flyer520--email=12700696@qq.com (登录OK) 查看登录信息:cat ~/.docker/config.json 第3步,下载docker镜像。 docker pullbusybox docker pull nginx docker images 第4步,修改标签(重设标签)。 测试1:修改nginx标签,并push上传到flyer520的docker-hub中。 docker tagnginx flyer520/nginx docker pushflyer520/nginx 测试2:修改busybox标签,并push上传到flyer520的docker-hub中。 docker tagbusybox flyer520/busybox docker pushflyer520/busybox 验证:登录到docker-hub,查看是否多了nginx镜像。 本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1959550,如需转载请自行联系原作者

优秀的个人博客,低调大师

2017年度个人技术学习总结

2017年马上就过去了,记得年初的时候对2017年的技术学习规划还历历在目,当时定下的年度目标是通过报一个学习课程系统的学习和掌握Linux技术,从而为Openstack云计算打好基础,最终通过比较和筛选,我选择了51CTO网络学院的马哥教育Linux系统架构师培训课程。 马哥课程的逻辑思路、概念讲的非常清楚,课程安排也是花了很多的心思,我就不在这里做广告了,总之就是按照整个培训课程(微职位)的安排,尽量在规定的时间内完成了每个模块的学习,最终在12月初完成全部10个模块的学习。 在我的学习过程中主要的困难是没有足够的时间,针对这个问题,我主要是利用上下班的路上,利用坐公交车和地铁的时候看视频课程,一般每天观看3个小时的视频课程基本上就可以跟上学习进度,如果设置手机APP视频速度*1.5倍,观看的进度还可以提升50%,因此,观看视频的时间有了。 另外的一个困难是实验环境,在学习的过程中需要有实验环境进行验证,在年初的时候没有实验环境,后面在工作中找到一台测试用的PC服务器,上面装win10 64位操作系统,再安装virtualbox,16核24G内存,足够做所有的实验了。 在同学们的QQ群中了解到,大部分同学存在一个更大的困难是没有Linux基础,这样的话学习的时间需要大大增加,因为这个课程的信息量还是非常大的,如果没有相应的实践基础,0基础的同学会学的非常吃力。所幸我原来对AIX和HP-Unix都有所了解,并且有过多年的Linux使用经验,基础算是不错的。当有一天我们培训班的草莓班主任给我打电话,说我的学习进度比较快,让我当我们组组长的时候,我感到很惊讶,因为其实那个时候我的进度只是勉强跟上了计划的学习时间,后面我才意识到是由于我在培训班里面是为数不多的“老油条”,绝大部分同学没有很好的基础。 通过一年系统的Linux系统架构学习,对于原来不是很清楚的Linux高可用架构,Keepalive,防火墙Iptables原理和规则,zabbix,openstack组件等知识点都有了一个全面系统的提升。通过这些积累,我自己参考Openstack社区官网动手完成了一系列的实验,模拟生产环境下搭建Openstack私有云,模拟各种场景,完成了ansible方式部署和kolla容器化部署的相关实验,在实验的同时还同步整理了详细的实施部署维护文档,也算是对今年技术学习的一个不错的交代(允许我自夸一下,哈哈) 。 现在的技术发展日新月异,在IT行业,总是有一种紧迫感,永远都有新的东西需要学。现在流行的ABC(A:人工智能,B:大数据,C:云计算),我现在算刚跨入门槛的只是C:云计算 ,明年的技术总体规划是学习B:大数据,并且开始熟悉java编程技术,因为编程应用和大数据的实际应用息息相关。我不奢求能精通所有的新技术,能做到每年相比前一年有进步足矣。 题外话,现在大家都在说人工智能将深刻改变我们的生活,但是,实际上真正掌握人工智能的人可能是极少数的人,有时候还真不能想太多,过好自己的每一天就对了,就像10年前我们很难想象现在使用的智能手机和享受到的高网速,这些技术都是为我们人服务的,享受就好了。如果有机会自己有能力去掌握这些技术,那就是一种幸运,但是如果没有这个能力和机会,那是正常的,不必强求。 本文转自yuweibing51CTO博客,原文链接:http://blog.51cto.com/yuweibing/2054815 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

对Python装饰器的个人理解方法

0.说明 在自己好好总结并对Python装饰器的执行过程进行分解之前,对于装饰器虽然理解它的基本工作方式,但对于存在复杂参数的装饰器(装饰器和函数本身都有参数),总是会感到很模糊,即使这会弄懂了,下一次也很快忘记,其实本质上还是没有多花时间去搞懂其中的细节问题。 虽然网络上已经有很多这样的文章,但显然都是别人的思想,因此自己总是记不牢,所以花点时间自己好好整理一下。 最近在对《Python核心编程》做总结,收获了不少,下面分享一下我自己对于Python装饰器的理解,后面还提供了一个较为复杂的Python装饰器的执行过程的分解,可以参考一下。 1.Python装饰器的出现 在没有装饰器之前,如果要在类中定义一个静态方法,需要使用下面的方法: classMyClass(object): defstaticFoo(): staticFoo=staticmethod(staticFoo) 即要在该静态方法中加入类似staticmethod()内建函数将该方法转换为静态方法,这显然非常麻烦,而有了装饰器之后,就可以写成下面这样: classMyClass(object): @staticmethod defstaticFoo(): pass 这样就简洁很多了。 2.Python装饰器类型与理解 (1)无参数装饰器 一个装饰器 下面的情况: @f deffoo(): pass 其实就相当于: deffoo(): pass foo=g(foo) 多个装饰器 下面的情况: @g @f deffoo(): pass 就相当于: deffoo(): pass foo=g(f(foo)) (2)含参数装饰器 带有参数的一个装饰器 下面的情况: @decomaker(deco_args) deffoo(): pass 就相当于: deffoo(): pass foo=decomaker(deco_args)(foo) 用这样的思想去理解就非常好理解了:decomaker()用deco_args做了些事并返回函数对象,而该函数对象正是以foo作为其参数的装饰器。 下面多个装饰器的例子也是按这样的思想去理解。 带有参数的多个装饰器 下面的情况: @deco1(deco_arg) @deco2() deffoo(): pass 就相当于: deffoo(): pass foo=deco1(deco_arg)(deco2(foo)) 3.Python装饰器执行过程的手动分解 OK,有了上面的理论基础,理解下面一个较为复杂的装饰器就很容易了: fromfunctoolsimportwraps deflog(text): defdecorator(func): @wraps(func)#itworkslike:wraper.__name__=func.__name__ defwrapper(*args,**kwargs): print'%s%s():'%(text,func.__name__) returnfunc(*args,**kwargs) returnwrapper returndecorator @log('Hello') defnow(area): printarea,'2016-01-23' now('Beijing') print'Thenameoffunctionnow()is:',now.__name__ 执行如下: /usr/bin/python2.7/home/xpleaf/PycharmProjects/decorator_test/dec10.py Hellonow(): Beijing2016-01-23 Thenameoffunctionnow()is:now 对于该程序的执行过程,可以分析如下:1.先执行log('Hello')函数,此时返回了一个新的函数,只不过其中的text变量被替换为'Hello',所以用来装饰now函数的新的装饰器如下:defdecorator(func): @wraps(func)#itworkslike:wraper.__name__=func.__name__ defwrapper(*args,**kwargs): print'%s%s():'%('Hello',func.__name__) returnfunc(*args,**kwargs) returnwrapper2.所以此时的now函数,就相当于:now=decorator(now)3.即now就相当于:defnow(*args,**kwargs): print'%s%s():'%('Hello',old_now.__name__) returnold_now(*args,**kwargs) #现在的函数名称变为了now而不是wrapper,是因为使用了wraps装饰器 所以,输出的结果也就非常好理解了。 关于wraps,它也是一个装饰器,使用它的作用是,被我们用自定义装饰器修改后的函数,它的函数名称,即func.__name__跟原来是一样的,而它的工作原理正如上面所提及的,即: wraper.__name__=func.__name__ 也就是说,使用wraps可以不改变原来函数的属性,当然,上面只是简单说明了一下其工作原理,详细的可以参考wraps的源代码。 在GitHub上给出了10个理解装饰器的例子,可以参考一下:https://github.com/xpleaf/decorator 本文选中我的《Python回顾与整理》系列博文中的《Python回顾与整理9:函数和函数式编程》

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册