发表于: 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

2linux系统的应用:

  服务器系统

         Web应用服务器、数据库服务器、接口服务器、DNSFTP

  嵌入式系统

         路由器、防火墙、手机、PDAIP分享器

  高性能运算、计算密集型应用

         Linux具有强大的运算能力

  桌面应用系统

  移动手持系统

3linux的目录结构(部分,重要的)

  home:存放用户文件的根目录

  root:超级管理员目录

  etc:存放配置文件

  usr:存放共享的资源

4linux的命令

  常用的命令(常用部分必须掌握!!!)

         查看帮助: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(),由于使用了多态的方式,现在Objectobj对像的编译类型,不能调用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)        复习了反射,感觉还行



返回列表 返回列表
评论

    分享到