作为java程序员你是什么级别(java程序员级别分层)

  • 时间:
  • 6296人关注

这是一篇关于java相关的编程问答内容,被254位程序员关注,内容涉及到java程序员、java程序员分层、java程序员级别、java程序员级别分层等,由暨文轩 编辑补充,一起来看下大家的回答。

深圳低中高等级java程序员,你是什么级别,日常中,程序员的级别,往往根据工作年限进行划分。例如:工作3年以内的,是初级;工作3~5年的,是中级;工作年限更多的,就是高级了。这样简单粗暴的划分,显然是不准确的。更确切地说,我们更希望具有相应工作年限的,应该达到相应的级别。

1.初级程序员-知道有事要做

处于初阶段的程序员,应该把精力集中在专业能力的提升上。由于经验不足,往往并不能很好的完成一样工作,但是,一个好的学习方法,一个好的做事方法,是非常关键的,这些决定了能够决定成长多块、成长多高。

如下几点,是初级程序员常见的现象,如果你身上还有某一点的存在,那还处于初级阶段:

很难提出正确的问题,大多会直接问别人这个功能应该怎么做。如果你清楚地向他解释,他就会完全按你说的去做,甚至你写的示例代码都会copy过去。因为在他们的世界里,只有编译成功和编译失败,任务完成和任务未完成。

经常犯错误,所以会预留过多“弹性时间”,以便有时间在到期日之前重做。所以总会抱怨“没时间”。

对与自己有工作交集的人员的职能没有认识。比如,对测试人员总是充满敌意的,因为他们发现了错误,“阻碍”了自己完成工作。

还没注意养成一些好习惯,比如习惯性的提炼重复代码、编写风格一致的代码、自测等等。

很遗憾,看似很初级的阶段,并不只是刚踏入工作的程序员所属,在实际工作中,也有不少工作多年的人还处在这个阶段。

2.中级程序员-知道如何做某事

对人群按照单一的维度划分,大多数都是符合正态分布的。按照能力给程序员进行级别划分,中级程序员应该是大多数,而初级和高级,应该处在正态分布的左右两侧。

中级程序员已经有了一定的整体意识和观念,但仍然没有把控全局的能力,局限在某个模块、流程上。例如:在工作中能够主导某个模块的开发,对自己的业务有深入的理解,能提出问题并解决问题。

同样可以观察一下周围,中级的开发大多数会这样做事。

针对一个问题,可以提出多个方案,但是无法做出准确的决策。一旦更权威的人给出了他的选择,中级程序员就会不假思索的按照建议执行。

可以看出代码中的一些设计模式,但是自己写代码的时候除了单例和工厂,其它的几乎想不到。

在讨论一些时髦的框架和技术的时候总能聊上几句,但是追问这个框架或者技术有什么缺点,基本说不上来。甚至,草率的在项目中运用上这些时髦的框架和技术,最终导致线上问题频发,不得不让高级程序员来收拾残局。

能够对自己完成任务所需的时间有准确的评估,但是评估他人的时间不会因人而异,也会以自己作为标准来评估。

对与自己有工作交集的人员的职能有了一定的认识。比如,会主动寻求测试的配合,帮助自己交付更高质量的项目。

3.高级程序员-知道必须做些什么

高级程序员不但可以把从1到100的事情做得很好,也有能力带领其它人完成0到1的事情。他们应该明白没有什么是完美的,相反,问题、缺点和风险总是存在的。他们的决策总是站在为了整体的「平衡」角度去考虑,而不是技术的酷炫或者外界流传的所谓“正确的”技术。他们会更多的关心那些不显而易见的东西,如可维护性,可扩展性,易阅读,易调试等等。

高级程序员就好比社会中的成年人,他们踩过足够多的坑,也填过足够多的坑,已经认清了现实的残酷,寻求适合而不是完美。周到、务实、简单,是他们做事的时候强烈散发出的“味道”。

可以根据下面的这些场景来看看你身边有多少“有味道”的高级程序员?

与初级和中级程序员不同,他们抛出问题不是为了正确的做事,而是做正确的事。他们会询问为什么要这样做以及你想要实现什么。当你告诉他们目标是什么后,他们或许会通过暗示这种方式是错误的而另一种更好来做出一些修正;当然,更重要的是还会提供论据说服你。

因为提前明确了做事的目标,所以在动手做一件事的过程中,他会在关键细节思考有没有更好的方法,甚至是那些不在之前的讨论范围的新尝试。

他可以轻松地承认他不知道什么,并且向你请教。同时也可以轻松地向他人讲清楚他所知道的事情。

他们理解合作的人员的职能的作用,不但知道什么时候向谁寻求帮助,还知道自己如何更好的帮助他们。

困难的事交给他们很放心,因为他们擅长的不是某种技术,而是解决问题的能力。他们总能解决那些之前从未遇到过的新问题,哪怕它们很困难。

以上就是码农之家java培训机构的小编针对“深圳低中高等级java程序员,你是什么级别”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

码农之家
精选回答2:Java中 log4j日志级别配置详解

9小时16分钟前回答

1.1 前言

  说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis、rabbitMQ、SSM框架的相关面试题以及自己做过的一些项目回顾,信心满满地去面试,结果别人一上来就问到了最近项目使用的日志系统是什么?日志级别是怎么配置的?当时我都蒙X了,平时都是项目经理搭的,我自己也是随便上网一搜往配置文件一黏贴就OK了。我就这么说完后面试官深深定了我一眼,当时我的内心羞愧到......

1.2 闲话少说,讲讲日志的发展故事(如果已经了解的可以跳过,直接看1.3日志配置)

  要想对日志技术实现深入了解,我个人建议去看:logback + slf4j。至于日志配置,还是了解log4j比较好,因为目前绝大部分的项目还是使用log4j的。好了,下面开始讲讲日志的发展故事:

  1999年,Apache开源社区发布了log4j,一时轰动整个程序界,从此成为日志的标准并广泛为java程序员所使用。随后Sun公司也在JDK1.4版本时发布了Logging机制(java.util.logging,以下简称JUL),但是该机制并未获得公众的认可,真是可怜。不久Apache又推出了commons-logging日志框架(能够让开发者抽象日志实现方式而不必关注具体使用哪个日志技术,通俗地说就是你要用手机叫滴滴,如果你是在北京你就会叫来北京的滴滴,在香港你就会叫来香港的滴滴),该框架仿佛是对Sun公司的鄙睨,其可以自动查找调用当前环境下的日志技术进行日志输出,该日志框架可支持log4j或JUL。commons-logging+log4j在其后的很长一段时间内成为了Java日志的经典组合。然而之后commons-logging有一段时间没更新了,不知道是不是commons-logging当初的设计不够好,想再优化也比较多困难,为什么这么说呢?因为接下来一个优秀的日志框架slf4j诞生了,该作者(Ceki Gülcü)就是log4j的作者之一,他的slf4j设计上更优雅,并且他还实现了logback技术,也是比log4j更前沿。至此,日志体系由commons-logging+log4j一家独大的局面开始受到动摇,各种commons-logging+log4j?slf4j+log4j?slf4j+logback?搭配,真是让人揪心。更恐怖的是,Ceki Gülcü大佬又帮忙优化了log4j,从此世界又多了一项日志技术--log4j2。这是要学腾讯搞微信和QQ吗,真是666。因此,如果大家想对日志技术深入了解的话,可以去找找logback + slf4j的相关资料。至于配置文件,我认为你就了解下我下面写的log4j配置详解就好了,毕竟现在还是比较多公司用log4j框架的。

1.3 进入正题,log4j日志基本配置

1.在项目的classpath下或者resource包下(maven项目)新建一个log4j.properties文件,初始项目配置如下参数就足够了,更详细配置可继

续看1.4 log4j日志级别配置;

#通过根日志记录器指定日志级别及输出源 
#日志输出的优先级: debug < info < warn < error < fatal
#定义根日志记录器的日志级别(info)及输出源的别名(console,myFile)
#该定义让日志在控制台和文件输出,并且只输出info级别以上的日志
log4j.rootLogger=info,console,myFile
#######配置输出源console的具体实现为控制台输出#######
#定义输出源别名console(即根日志记录器定义的输出源)
#的实现类是ConsoleAppender(控制台输出源)log4j.appender.console=org.apache.log4j.ConsoleAppender 
#指定日志输出格式的格式转换器为PatternLayout实现类
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#定义日志输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n 
#######配置输出源myFile的具体实现为文件输出#######
#定义输出源别名myFile(即根日志记录器定义的输出源)
#的实现类是RollingFileAppender(文件输出源)log4j.appender.myFile=org.apache.log4j.RollingFileAppender
#定义日志文件的存储路径
log4j.appender.myFile.File=src/log/logProperties/log4j.log
#定义日志文件的大小
log4j.appender.myFile.MaxFileSize=1024kb
#定义日志文件最多生成几个(从0开始算1个,即此处最多3个文件)
#超过该大小则会覆盖前面生成的文件
log4j.appender.myFile.MaxBackupIndex=2
#指定日志输出格式的格式转换器为PatternLayout实现类
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout
#定义日志输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n 
#######输出格式解释#######
#%d: 日志打印的时间点,默认格式为ISO8601,也可以另外指定格式,
   #定义如下: %d{yyy年MM月dd日 HH时mm分ss秒SSS},则会输出:
   #2018年01月06日 14时47分45秒590
#%p: 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
   #%-5p:表示字符小于5位,则字符居左(不加“-”号则字符居右),你可以举一反三
#%c: 日志所在类的全名
#%M: 日志所在方法的名字
#%m: 日志信息
#%n: 输出一个回车换行符
#%L: 输出代码中的行号

2.调用日志测试配置结果。

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogPropertiesTest {
 public static void main(String[] args) {
  /*解析非classpath下的配置文件
  String log4jPath=System.getProperty("user.dir")+"\\src\\log\\logProperties\\log4j.properties";
  PropertyConfigurator.configure(log4jPath);*/
  Logger log = LogManager.getLogger(LogPropertiesTest.class);
  log.debug("调试");
  log.info("信息");
  log.warn("警告");
  log.error("错误");
  log.fatal("致命错误");
 }
}

1.4日志级别配置

  日志级别配置可分为3类,一类如上配置是配置父类日志记录器的日志级别,第二类是配置子类日志记录器的日志级别,第三类是配置输出源(控制台、文件等)的日志级别。他们的日志级别解析优先级由低到高排列。具体表述原谅我说不清楚,直接
上案例,大家应该能够懂!

1.如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),没有配置子类日志记录器的日志级别,也没有配置输出源的日志级别,则输出源只能输出INFO级别以上的;

2.如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),配置了子类日志记录器的日志级别(假设是DEBUG级别),没有配置输出源的日志级别,则输出源输出DEBUG级别以上的;

3.如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),配置了子类日志记录器的日志级别(假设是DEBUG级别),配置了输出源的日志级别(假设是INFO级别),则输出源输出INFO级别以上的;

4.如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),没有配置子类日志记录器的日志级别,配置

了输出源的日志级别(假设是DEBUG级别),则输出源输出INFO级别以上的;

因此,从上述的案例中我们可以知道日志记录器和输出源输出日志级别存在2个逻辑关系:

1.输出源如果没有定义日志级别,它会继承最接近它的子类日志记录器的日志级别;子类日志记录器没有定义日志级别,它会继承最接近它的父类日志记录器。

2.打印日志时输出源会根据自身定义的日志级别与最接近它的子类日志记录器定义的日志级别比较,如果输出源定义的级别高于子类日志记录器,则按输出源定义的日志级别输出日志,反之则按子类日志记录器的日志级别输出。

所以在项目中可以按日下配置方式配置日志级别:

#控制父类日志记录器的日志级别为info,默认所有模块下只输出info级别以上的日志
log4j.rootLogger=info,console
#单独控制某个模块下的日志级别为error,只有发生异常的时候才输出日志
log4j.logger.log.logProperties=error
#单独控制某个类的日志级别debug,方便输出调试信息
log4j.logger.log.logProperties.LogPropertiesTest=debug
############# 日志输出到控制台 ############# 
#日志输出到控制台使用的api类 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
#指定当前输出源的日志级别,有了前面的配置,就不需要配置该项了
#log4j.appender.console.Threshold = info
#指定日志输出的格式:灵活的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
#具体格式的内容
log4j.appender.console.layout.ConversionPattern=%d %-2p [%c.%M()] - %m%n 

1.5结束语

  到此,相信你日志配置有了基本的掌握了。文中有很多地方可能会有不对的地方,欢迎各位大侠指出。我也是为了能够深刻理解该技术的配置,才撰文总结,这样我就会对它有更深层次的理解了。

展开问题
码农之家
精选回答3:Java面试题:数据库事务隔离级别

19小时10分钟前回答

 

数据库事务隔离分为4个级别,由低到高依次是ReadUncommitted(读未提交)、Readcommitted(读提交)、Repeatableread(可重复读)、Serializable(序列化)。这四个级别可逐步解决脏读、重复读、幻读的问题。

首先来看一下脏读、重复读、幻读的定义。

脏读

所谓脏读,就是指事务A读到了事务B还没有提交的数据,但事务B又进行了回滚,产生了脏数据。

不可重复

不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

例如事务A在读取某一数据,而事务B立马修改了这个数据并且提交事务给数据库,事务A再次读取该数据就得到了不同的结果,发送了不可重复读。

不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。

幻读

幻读是指在一个事务的两次查询中数据笔数不一致,例如有一个事务A查询了几列(Row)数据,而另一个事务B却在此时插入了新的几列数据,先前的事务A在接下来的查询中,就会发现有几列数据是它先前所没有的。

ReadUncommitted(读未提交)

如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他锁”实现。避免了更新丢失,却可能出现脏读。也就是说事务A读取到了事务B未提交的数据。

Readcommitted(读提交)

读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

该隔离级别避免了脏读,但是却可能出现不可重复读。事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。

Repeatableread(可重复读)

读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

避免了不可重复读取和脏读,但是有时可能出现幻读。这可以通过“共享锁”和“排他锁”实现。

Serializable(序列化)

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

序列化是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为ReadCommitted。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

大多数数据库的默认级别就是Readcommitted,比如SqlServer,Oracle。

MySQL的默认隔离级别就是Repeatableread。

       以上就是码农之家Java培训机构小编介绍的“Java面试题:数据库事务隔离级别”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

相关推荐

最新最全java面试题及答案(初级到高级)

史上最全的中高级JAVA工程师面试题及答案汇总

Java高级开发工程师面试题

2019史上最全java面试题题库大全800题

哪有资深java工程师面试题

 

展开问题

参考资料

  • Java程序员职场全攻略:从小工到专家

    Java程序员职场全攻略:从小工到专家

    Java程序员职场全攻略 作者:吴亚峰著 ISBN:7121102463/9787121102462 出版时间:2010-2-1 丛编项:从小工到专家

    大小:39.38MBJava

    立即下载
  • 菜鸟成长之路:Java程序员职场全攻略

    菜鸟成长之路:Java程序员职场全攻略

    《菜鸟成长之路:Java程序员职场全攻略》 内容简介:以包罗万象的IT这个大江湖为背景,将Java职场中从入门前的学校菜鸟到成长为技术大牛的过程展现给读者,内容饱满但又不失趣味性。在《

    大小:51.4 MBJava职场

    立即下载
  • Java程序员面试笔试真题与解析

    Java程序员面试笔试真题与解析

    这是一本程序员面试笔试必读书籍,考查率高,本书中所选真题全是程序员面试笔试常考点,针对当前各大IT企业面试笔试中特性与侧重点,精心挑选了三年来近百家IT企业的面试笔试真题,欢

    大小:64.9 MB程序员面试

    立即下载
  • Java程序员修炼之道

    Java程序员修炼之道

    伴随着关键服务平台及其生态体系的与时俱进,Java技术性一直在迅速往前发展趋势。《 Java程序员修炼之道 》包含了Java7的**特性和Java开发设计的核心技术,对当今很多开源系统技术性共存,

    大小:8.7 MBJava

    立即下载
  • Java程序员面试笔试宝典

    Java程序员面试笔试宝典

    本书是程序员求职面试笔试必备图书,以独特的视角对面试过程中求职者存在的各类问题进行了深度剖析,是一本适合计算机相关专业毕业生阅读的求职指导用书

    大小:73.4 MBJava面试

    立即下载
  • Java程序员面试宝典

    Java程序员面试宝典

    Java程序员面试宝典(第4版) 是《Java程序员面试宝典》的第4版。第4版在保留前三版数据结构、字符串处理、Java程序设计等主干内容的基础上,更新了部分程序员面试题目,内容主要取材于

    大小:78.6 MBJava面试

    立即下载
  • Java程序员面试笔试真题库

    Java程序员面试笔试真题库

    《Java程序员面试笔试真题库》 针对当前各大IT企业面试笔试中的特性与侧重点,精心挑选了近3年来18家IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机A

    大小:291.9 MBJava面试

    立即下载

更多回答

4小时19分钟前回答

Java面试题:数据库事务隔离级别

数据库事务隔离分为4个级别,由低到高依次是ReadUncommitted(读未提交)、Readcommitted(读提交)、Repeatableread(可重复读)、Serializable(序列化)。这四个级别可逐步解决脏读、重复读、幻读的问题。 首先来看一下脏读、重复读、幻读的定义。 脏读 所谓脏读,就是指事务A读到了事务B还没有提交的数据,但事务B又进行了回滚,产生了脏数据。 不可重复 不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。 例如事务A在读取某一数据,而事务B立马修改了这个数据并且提交事务给数据库,事务A再次读取该数据就……

46小时20分钟前回答

java类成员中的访问级别浅析

我们知道想要访问一个网站,根据身份的不同,会有一些使用上的限制,这就是权限级别的体现。在java的类成员中,有一些访问的级别是需要我们了解的,主要分为四种:public、private、protected、package。下面我们就这四种访问修饰符分别进行详细的介绍。 一、四种访问修饰符 1.public修饰符用于暴露域和方法,以便在类定义的包外部能访问它们。对包和类中必要的接口元素,也需要使用这个级别;main()方法必须是public的,toString()方法也必须是public的。一般不会用public暴露一个域,除非这个域已经被声明为final。(包内访问) 2.private标识的访问模式,表示私有的域和方法只能被同一个类中的其他方法访问……

21小时28分钟前回答

Java中 log4j日志级别配置详解

1.1 前言 说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis、rabbitMQ、SSM框架的相关面试题以及自己做过的一些项目回顾,信心满满地去面试,结果别人一上来就问到了最近项目使用的日志系统是什么?日志级别是怎么配置的?当时我都蒙X了,平时都是项目经理搭的,我自己也是随便上网一搜往配置文件一黏贴就OK了。我就这么说完后面试官深深定了我一眼,当时我的内心羞愧到...... 1.2 闲话少说,讲讲日志的发展故事(如果已经了解的可以跳过,直接看1.3日志配置) 要想对日志技术实现深入了解,我个人建议去看:logback + slf4j。至于日志配置,还是了解log4j比较好,因……