发表于: 2017-09-04 22:50:18
8 941
一、 今天完成的事情
1) 深度思考
1) Q4、为什么要用Log4j来替代System.out.println?
① 首先明确使用打日志的意义。
记录日志可以作为日后处理问题的一个追溯,方便开发者根据日志来统计查询处理问题。此外,查阅日志内容可以了解项目的运行状况,发现项目存在的一些隐藏的bug。
② 对于这个问题,我们可以来看看log4j相对System.out.println的优势。
Log4j通过配置文件能够自如的控制日志信息的输出位置、输出格式
Log4j中的日志信息可分级展示
Log4j除了可以显示日志信息,还能显示调试信息。这脱离ide的情况下可以可以用来调试,相比起system.out方便许多
System.out更占用资源。对此我做了如下试验:
编写了如下方法做测试:
测试System.out的:
测试log4j的:
输出结果:
很奇怪,结果却是system.out明显优于log
重新思考占用资源的问题,实际上是大量的io操作导致资源的占用,log4j可以通过设置配置文件来控制输出减少io操作,而system.out在代码中却是必须的输出,除非注释/删除代码。因此,这或许是system.out更占资源的原因吧?
③ Log4j在代码中的使用:
方式一:需要时就在当前类定义logger变量,调用方法输出
方式二:定义一个BasicLogger类来获取logger对象,以后其它类需要用到logger时直接继承该类(师兄告诉我的,解决我一直使用方法一的困扰)
方式三:使用一个LoggerUtils,获取好logger对象
这是我突然想到的,也不知道可不可行。
使用时:
2) Linux操作
linux:操作系统
1)首先来了解下linux:
linux是一个多用户,多任务的操作系统
linux:
版本:
内核版本 linux内核
发行版本 ubuntu CentOs redhat ...
centos:开源的免费的os
2)linux系统的应用:
服务器系统
Web应用服务器、数据库服务器、接口服务器、DNS、FTP等
嵌入式系统
路由器、防火墙、手机、PDA、IP分享器
高性能运算、计算密集型应用
Linux具有强大的运算能力
桌面应用系统
移动手持系统
3)linux的目录结构(部分,重要的)
home:存放用户文件的根目录
root:超级管理员目录
etc:存放配置文件
usr:存放共享的资源
4)linux的命令
常用的命令(常用部分必须掌握!!!)
查看帮助:man 命令 (如 man mkdir) (全称:manual pages)
退出查看:q (quit)
切换目录:cd (全称:change directory)
cd 目录
cd 目录/子目录
cd .. :切换到上一级目录
cd / :切换到根目录
cd ~ :切换到用户主目录
创建目录:mkdir (make directory)
mkdir 目录
mkdir -p 目录/子目录/...
删除目录:rmdir (remove directory)
rmdir 目录 :只能删除空目录
展示目录下的文件列表
ls (list)
ls :展示的是能看见的文件的名称
ls -a :展示所有的文件的名称(文件前面有"."的是隐藏文件)
ls -l :显示文件的详细信息,简写:ll(▲)
ll -h :显示文件的格式化的详细信息
浏览文件
cat :catenate,显示文件的所有内容
more :分页显示 空格:下一页; 回车:下一行
less :分页显示 PgUp:上一页; PgDn:下一页
tail(▲▲):查看文件的后几行的内容
tail -最后几行 文件名
tail -f 文件名 :动态的查看文件
例如:tail -f catalina.xxx.log
操作文件
touch 文件名 :创建文件
cp 文件名 目录/文件名 :copy,复制文件
mv 文件名 路径 :move,移动文件
删除文件
rm 文件名 :remove,删除文件
rm -f 文件名 :force,不带询问删除
rm -r 目录 :recursive,以递归的方式删除一个目录
rm -rf 目录 :以递归的方式不带询问删除一个目录
tar :打包或解压文件(▲▲)
常用组合
-cvf :create verbose force,打包
-zcvf :gzip create verbose force,打包并压缩成.gz
-xvf :extract verbose force,解压
-xvf 文件名 -C 目录
格式:
tar 参数 文件名 被操作的文件名
例如:
将当前目录下所有文件打包成test1.tar
tar -cvf test1.jar ./*
将当前目录下所有文件打包并压缩成test2.tar.gz
tar -zcvf test2.jar.gz ./*
将test1.tar解压到指定目录
tar -xvf test1.jar -C newdir
其它的常用命令:
grep:查找符合条件的字符串(▲) 格式:grep 字符串
pwd:当前的目录
wget:下载资料 格式:wget 资源路径
3) 回顾Java基础部分——反射
1)引入
现有代码:Object obj = new java.util.Date();
现在需要obj对象调用java.util.Date类的方法toLocalString(),由于使用了多态的方式,现在Object为obj对像的编译类型,不能调用java.util.Date类的特有方法。
这个问题最直接解决的方式——强转。示例:(java.util.Date)obj.toLocalString();
可是若是此时不知道obj的运行类型是什么,那要如何解决呢?
答案便是反射机制。
2) 反射
反射机制,指的是在程序运行时,动态地获取类中的成员信息(包、父类、接口、修饰符、类名、构造器、方法、字段等),可以说是对类的解剖
顺提一下,eclipse中的outline(大纲视图)便是通过反射实现的。
3) 反射的开始——获取字节码文件对象
字节码文件,即.java文件编译后产生的.class文件,在Java中一切皆对象,连同这份文件也有了它的实例。
获取Class对象的三种方式。
方式一:类型.class
示例:Class<java.util.Date> clz1 = java.util.Date.class;
方式二:对象.getClass()
示例:Class<java.util.Date> clz2 = obj.getClass();
方式三:Class.forName(String 类全限定名)
示例:Class<java.util.Date> clz3 = Class.forName(“java.util.Date”);
4) 有了Class对象后能干嘛??
直接点来讲,有了一个类的Class对象后可以或该类的一切信息,包括私有成员!
待续…..
二、 明天计划的事情
1) 继续做深度思考
2) 继续学习linux
3) 继续复习java基础
三、 遇到的问题
四、 收获
1) 按照师兄说的一天一深度思考题确实不错,让我更能集中精力去思考
2) 熟悉linux的基本操作
3) 复习了反射,感觉还行
评论