总结
总的来说,面试是有套路的,一面基础,二面架构,三面个人。
最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
3)测试代码:
import org.apache.log4j.Logger;
public class Log4jTest {
public static void main(String[] args) {
Logger logger = Logger.getLogger(Log4jTest.class);
logger.info(logger.getClass().getName());
logger.info(“apache日志框架log4j”);
}
}
4)运行结果:
2、使用JUL日志框架实现
1)JUL日志系统在JDK中已引入,故无需导包,代码如下:
import java.util.logging.Logger;
public class JulTest {
public static void main(String[] args) {
Logger logger = Logger.getLogger(JulTest.class.getName());
//判断日志使用类型
logger.info(logger.getClass().getName());
logger.info(“官方JDK日志框架Jul”);
}
}
2)运行结果:
四、日志门面框架整合日志实现框架
使用日志门面框架缘由:在阿里开发手册上有关于日志门面使用系统的强制规约:
应用中不可直接使用日志系统(log4j、logback)中的 API ,而应依赖使用日志框架中的 API 。使用门面模式的日志框架,有利于维护和各个类的日志处理方式的统一。
1、Sif4j门面框架+Log4j实现
1)添加slf4j的核心依赖:
org.slf4j
slf4j-api
2)Sif4j门面框架+Log4j实现使用的桥接器:
桥接器:日志门面接口本身通常并没有实际的日志输出能力,它底层还是需要去调用具体的日志框架API的,也就是实际上它需要跟具体的日志框架结合使用。
由于具体日志框架比较多,而且互相也大都不兼容,日志门面接口要想实现与任意日志框架结合可能需要对应的桥接器,说白了,所谓“桥接器”,不过就是对某套API的伪实现。
这种实现并不是直接去完成API所声明的功能,而是去调用有类似功能的别的API。这样就完成了从“某套API”到“别的API”的转调。
添加桥接依赖:
org.slf4j
slf4j-log4j12
3)测试代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4jSif4jTest {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Log4jSif4jTest.class);
logger.info(logger.getClass().getName());
logger.info(“门面框架Sif4j整合Log4j输出”);
}
}
4)结果输出:
2、JCL门面框架+JUL实现
1)引入桥接依赖:
commons-logging
commons-logging
2)测试代码:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class JCLJULTest {
public static void main(String[] args) {
Log log = LogFactory.getLog(JCLJULTest.class.getName());
log.info(log.getClass());
log.info(“门面框架JCL整合JUL输出”);
}
}
3)输出结果:
此时,不是红色字体的JCL依赖。
原因是:JCL动态查找机制进行日志实例化,执行顺序为
commons-logging.properties>系统环境变量>log4j>jul>simplelog>nooplog
故添加commons-logging.properties。
org.apache.commons.logging.Log = org.apache.commons.logging.impl.Jdk14Logger
4)重新运行,输出结果:
五、合整合日志门面为slf4j
1、需求场景:
若项目在开发过程中,不同开发小组使用了不同的日志门面和日志实现系统,如第四节中JCL+JUL和Slf4j+Log4j的实现模式,先在为了统一用Slf4j这个门面系统,又不想对原有JCL+JUL模式的代码进行修改,该如何操作?
2、采用适配器
官方流图如下:
对于JCL门面来说,要想转换成Slf4j,只需要引入JCL的适配器,引入jcl-over-slf4j 的jar包:
org.slf4j
jcl-over-slf4j
3、依旧使用第四章节的代码
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class JCLJULTest {
public static void main(String[] args) {
Log log = LogFactory.getLog(JCLJULTest.class.getName());
log.info(log.getClass());
log.info(“门面框架JCL整合JUL输出”);
}
总结
阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
2、Redis学习笔记及学习思维脑图
3、数据面试必备20题+数据库性能优化的21个最佳实践
5336682557)]
2、Redis学习笔记及学习思维脑图
[外链图片转存中…(img-Iuaft4E7-1715336682558)]
3、数据面试必备20题+数据库性能优化的21个最佳实践
[外链图片转存中…(img-1EMaozUu-1715336682558)]