java基础知识有那些

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础知识有那些相关的知识,希望对你有一定的参考价值。

java基础知识有那些

Java 程序设计基础,包括 J2sdk基础、Java面向对象基础、Java API使用、数据结构及算法基础、Java AWT图形界面程序开发;
J2SE平台Java程序设计,包括Swing图形程序设计, Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,流和文件,多线程程序设计;
………………………………

看你问的问题,应该是对java很感兴趣,其实你可以自学java。关于如何学习java,我刚才看到一篇很不错的文章,是一个农民工介绍自己如何自学java,并找到Java的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
我是一名地地道道的农民工,生活在经济落后的农村,有一个哥哥和一个弟弟,父母都是地道的农民,日出而作,日落而息,我从小到大学习一直很好,从小学到高一都,成绩在全级一直名列前茅,这样我也顺利了考上省的重点高中,然而,每个学期开学是家里最为难的时候,每次交学费都让父母发愁许久,家里为了给我筹钱读书,都借了不少钱,才让我读上高中。我知道我读到高中家里已经欠了好多债,为了减轻家里的负担,我选择了退学。
2009年我高一退学,为了给家里还债,干过建筑工地的小工,搞过塑料制品加工,送水工等等。很工资都很低,一个月也就1000多,加上加班费一个月能拿2000多一点,我每个月都向家里寄回800-1000元,到了2011年末,一次偶然的机会我接触了Java,听说Java的前景挺不错,工资相对于我一个农民工来说简直是天文数字,于是我在新华书店买了几本Java的书,尽管白天辛苦工作,晚上回来还是坚持看书,但有于基础太差很多都很不明白,但还是坚持看,一有看1-2个小时Java的书,看着看着许多基础都慢慢的学会了,但那些比较难的还是看不懂,后来还买了有些关于框架的书,还是看不懂,这样断断续续的持续了半年多,觉得自己Java的基础都差不多懂了,但框架还是看不懂,还有最缺的项目经验,看了很多招聘Java程序员的简介都要项目经验,相对我一个农民工来连框架都弄不明白,想找一份Java工作对我来说简直是奢侈。我只想学Java,并不敢想以后能从事Java的工作。
有一次,在百度上看到一篇让我很鼓舞的文章,是一个Java高手介绍在没有基础的朋友怎么自学入门Java,文章写的很好,包含了如何学习,该怎么学习,他提到一个方法就是看视频,因为看书实在太枯燥和费解的,不少是我们也看不懂,这点我真的很认同,我自己看书都看了很久才学会基础。曾经有想过参加培训,但是上万元的培训费让我望而却步,我工资这么低,每个月还有向家里汇钱,加上城市消费比较高,虽然每个月只有几百剩下,但是相对于上万万学费和四个月的吃住费用逼我连想不敢想。 于是我决定看视频,我就去搜索Java的视频,虽然我零星的找到一些Java的视频,但是都不系统。最重要连项目都没有。后来我找到一份很好的视频,是IT学习联盟这个网站一套视频叫<<零基础Java就业班>>(喜欢《零基础Java就业班》的可以复制 t.cn/8sx5z6L 粘贴浏览器地址栏按回车键即打开)的教程还不错,很完整。还赠送11个顶级企业项目。价格很合理,于是我买下来。
于是开始了我的自学Java的路,收到光盘后,我就开始学习,刚开始学习还不错,是从零基础教起,老师幽默风趣而又轻松的课堂教课,使我发现原来学习JAVA并不是一件很难的事情。因为我本来基础还不错,前面的基础看一篇我就过去了,到了框架,我觉不又不是很难,可能老师太牛了,他能把复杂的问题讲的比较通俗易懂,有些难点的地方我还是连续看了五六次,把他弄懂。每天下午6点下班后,吃了饭,马上跑回家。看视频,买了几本笔记本。当时,为了编程还花几百元了台二手的台式电脑,配置一般,但编程是足够的。一边看视频,一边记笔记,把重点都记下来,还一边跟着老师敲代码,为了能尽早学会Java。每天都坚持学5-6个小时。经常学到晚上一点多才睡觉。星期六,日不用上班,每天7点多起床,学到晚上11,12点。那段时间特别辛苦,特别累。在学习Java的三个多月里,除了吃饭睡觉工作,剩余的时间都在学习,因为我知道自己的计算机基础不是很好,也没有学过什么计算机,只是学了些Java基础,相对于那些科班的人来说我要比他们付出更多的努力。我只能咬紧牙关,坚持下去,我不能放弃,我要完成我的梦想,我要让我的家人过上好日子。终于三个多月后我把Java教程里的内容和项目都学完了,在学项目的过程中我发现项目特别重要,他能把你学过的知识全部联系起来,能更好的理解你所学的知识。还有学习过程中,动手很重要,要经常跟着老师动手敲,动手吧,跟着做,一行一行的跟着敲,再试着加一些自己的功能,按照自己的思路敲一些代码,收获远比干听大的多。 如果遇到暂时对于一些思路不能理解的,动手写,先写代码,慢慢你就会懂了。这套视频还赠送了11个顶级企业项目,对于我没有任何经验的人来说,这个太重要了,还有在学习项目是提升能力最快的方法。项目能把所有的知识点全都连到一起了,不再是分散的,而是形成一个整体了。那种感觉是仅仅深入钻研知识点而不写真实项目的人所不能体会的。一个项目就是一根绳子可以把大片的知识串到一起。 就这样,我用了两个月也把项目给学完了。其实学完教程差不错就达到就业水平,但是我可能觉得自己学历低还是把那11个顶级企业项目才去找工作。
接着我就到51job疯狂的投简历,因为我的学历问题,初中毕业,说真的,大公司没有人会要我。所以我头的都是民营的小公司,我希望自己的努力有所回报。没有想过几天后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比价严格,需要有一年的项目经验,所以我没有被选中。 后来陆续面试了几加公司,终于功夫不负有心人,我终于面试上了一家民营的企业。公司规模比较小,我的职务是Java程序员。我想我比较幸运,经理看中我的努力,就决定吕勇我,开的工资是3500一个月,虽然我知道在北京3500只能过温饱的生化,但是我想我足够了,比起以前的工资好了些,以后可以多寄些钱回家。我想只要我继续努力。我工资一定会翻倍的。 把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有自卑,我们不比别人笨,只有我们肯努力,我们一样会成功。

…………………………………………
参考技术A 基础语法:
jdk的安装和环境配置,
变量和常量,
条件判断语句,
循环语句,
循环控制语句
方法和数组:
方法的定义和调用,
方法的重载和递归操作,
数组的定义和初始化,
数组的遍历和常见的方法调用
面向对象:
类的定义和对象的创建,
对象的实例化流程,
抽象,
封装,
继承,
多态思想,
接口的设计和实现
异常和常用类:
异常机制和异常体系,
try-catch语句,
throw和throws关键字,
自定义异常,
String,
StringBuffer,
StringBuilder类,
System,
Runtime类,
Math,
Random,
BigDecimal类
多线程:
并行和并发,
进程和线程,
线程的启动方式,
线程安全的处理方式,
同步锁和死锁的概述,
线程的生命周期和状态,
联合线程和后台线程,
线程优先级和线程礼让和定时器
集合框架:
ArrayList和LinkedList,
HashSet和TreeSet,
LinkedHashSet,
Comparable接口和Comparator接口,
HashMap和TreeMap,
LinkedhashMap,
泛型的定义和使用
IO和网络编程:
File类的基本使用,
FilenameFilter接口的使用,
IO流的体系结构,
字节流和字符流的使用,
缓冲流,标准流,打印流,转换流,数据流,管道流,对象流,
对象序列化和发序列化,
字符编码和解码,
Properties类加载资源,
RandomAccessFile类,
NIO操作,
网络概述和分层模型,
网络三要素,
TCP和UDP协议和编程
参考技术B JavaEE基础中包含的知识点有:Java基础语法、面向对象、核心类库、集合、异常、IO、线程、JDK新特性。
JavaWeb开发中包含的知识点有:前端技术、数据库、JAVA数据库操作、软件服务器及服务器相关技术、动态网页JSP、AJAX、优就业-在线医疗系统。
Java高级框架中包含的知识点有:SpringMVC、MyBatis 、Spring、mysql高级、Linux&Redis&nginx、Maven 、中公MIS权限系统。
大型微服务分布式项目实战:SpringBoot、SpringCloud、Git 、Dubbo、Zookeeper、AngularJS、Spring Security、BCrypt加密、FastDFS、分布式事务处理、Redis Cluster、Solr、SolrCloud、Freemarker 、JMS 、短信发送平台、SSO解决方案、CORS、Twitter的Snowflake、SpringTask 、Maven Profile、MongoDB简介、MyCat、Docker、Jenkins、东易买大型电商实战、东易众筹。
参考技术C 1,关键字:其实就是某种语言赋予了特殊含义的单词。
  保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。
2,标示符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0—9、a—z、$、_ ;
  注意:
    ①:数字不可以开头。
    ②:不可以使用关键字。
3,常量:是在程序中的不会变化的数据。
4,变量:其实就是内存中的一个存储空间,用于存储常量数据。
  作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。
  特点:变量空间可以重复使用。
  什么时候定义变量?只要是数据不确定的时候,就定义变量。
  变量空间的开辟需要什么要素呢?
    ①:这个空间要存储什么数据?数据类型。
    ②:这个空间叫什么名字啊?变量名称。
    ③:这个空间的第一次的数据是什么? 变量的初始化值。
  变量的作用域和生存期:
    变量的作用域:
    作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
    生命周期:
    变量从定义的位置开始就在内存中活了;
    变量到达它所在的作用域的时候就在内存中消失了
参考技术D

要知道java是分两部分的:一个是编译,一个是运行。初学者先弄清这些Java的基本概念也是必不可少的,要注意理解和运用。

    Java编程语言,即语法。

2.Java文件格式,即各种文件夹、文件的后缀。

3.Java虚拟机(JVM),即处理*.class文件的解释器。

4.Java应用程序接口(Java API)。

那些让面试官直呼内行的Java知识点

接上一篇 那些让面试官直呼内行的Java知识点(一)

其实此系列并非全是Java知识点,但都是作为Java语言开发者应该掌握的,好兄弟不骗好兄弟~

1、mysql中char和varchar有什么区别?

都是用来存字符串,但是:

  • char长度固定,最大长度255,实际长度小于设置长度时用空格补齐,举个栗子,char(5),如果你实际存的字符串是"abc",那么mysql在存储时会在abc后面加两个空格来补齐,即"a b c _ _",在你拿数据时,这两个空格又会被抹去,你得到的数据依然是abc三个字符;适合用来存身份证号、手机号等固定长度的数据;
  • varchar长度不固定,设置的长度是指最大长度,最大65535,存多少就是多少,如varchar(100),只要长度小于100的字符串都能存进去,字符串多长就用多长,不会追加空格;

2、java里Integer的最大值是多少?最大值+1等于多少?

最大值是2的31次方-1,即2147483647

最大值+1等于-2147483648

3、java是怎么保证finally里面的代码能够顺利执行的?

编译器在编译的时候,会把finally里面的代码复制多份,分别放在try和catch内所有能够正常执行以及异常执行逻辑的出口处,最直观的就是我们可以在字节码文件里看到很多份finally内部代码;
如下面这段代码

4、关于mybatis的缓存机制

mybatis有一级缓存和二级缓存

  • 一级缓存作用于单个session,默认开启,无需手动使用;
  • 二级缓存作用于整个mapper,默认开启,但需要手动使用;

如何使用二级缓存:在你的*Mapper.xml文件中添加cache标签即可,如下图

5、导致线程阻塞的原因有哪些?

  • 主动调用Thread.sleep(1000)方法:暂时放弃对cpu的使用,不会释放锁,睡眠时间到了后直接进入就绪态,拿到cpu时间片立即执行;
  • 主动调用Thread.yield()方法:向调度系统表明当前线程愿意放弃其对处理器的使用;
  • 遇到Object类的wait()方法:放弃当前持有的锁,进入等待状态,直到有其他线程将其唤醒;
  • 遇到Thread类的join()方法:当线程t调用在当前线程内部调用join时,当前线程会陷入阻塞,直到线程t执行完;
  • cpu时间片用完:线程调度是由操作系统控制,同一个系统里面线程那么多,cpu不可能只执行你这一个线程,所以每个线程在执行前都需要先拿到cpu时间片,用完后进入就绪态,再次拿到时间片即可开始执行;

6、java如何实现 “一次编译、处处运行” ?

当然是靠jvm啦~

我们敲的代码最终都会被编译成字节码,对项目打包其实打包的也是字节码;
而Java程序(Java程序其实就是一个字节码包)运行需要依赖jvm环境,不管什么平台,jvm规范都是同一套,所以我们的Java程序只要打包成字节码后,不管在哪里运行效果都是一样的

7、mysql事务有哪些特性?

mysql事务有ACID四大特性,我直接借用《高性能mysql》中的原话吧(网上这方面的资料多如牛毛,送兄弟们一句话,这些纯文字性的概念最好还是看官方的,因为每个人理解都不一样,我把我理解的内容讲给你听,你最后听到的可能并不是我想让你听到的,消息在传递过程中很容易失真,自己理解的才是最原始的,别听网上那些叼毛胡说)

下面这个转账场景是很经典、很能阐述事务特性的例子,好好捋捋


8、mybatis插入一条数据,怎么获得这条数据的id?

比如你插入一个user对象

userMapper.insert(User user);

在insert标签上加个配置

<insert id="insert" parameterType="User" keyProperty="id" useGeneratedKeys="true">

然后 新插入user的id会赋到你传入的user对象,通过user.getId()就能拿到了

当然 你先insert进去再select出来拿id也不是不行

9、redis如何管理过期的key?

redis采用 定期 + 惰性 删除的方式来管理key

redis会周期性地扫描当前所有key,发现过期的立即清除,这招叫 定期删除;
但是这样有个问题,扫描间隔太长的话,可能导致某些key多存活一个周期;太短的话,又会很影响性能,所以除了定期扫描,redis在使用某个key时会先校验key是否过期,如果过期直接删除,这招叫 惰性删除

10、什么是逻辑删除?有什么优缺点?

逻辑删除是指在删除数据库中数据时,通过修改一个额外字段来标识该数据是否被删除,而不真正从磁盘上删除数据

如下,0表示未删除,1表示已删除,查询时只需要判断是0还是1就知道该数据是否已删除

拿mysql来讲

优点:

1、当数据量大了以后,删除数据会造成b+树重排序,如果删除操作频繁会很影响mysql整体性能,有好兄弟肯定想说,插入也会导致重排序啊,但是插入我们避免不了的呀;
2、数据留着万一以后想做点统计啥的就很方便;

缺点:

1、数据量大了以后,很影响查询性能;
2、占用磁盘空间

优缺点五五开吧,实际开发中还是看业务需要


如文中有错,请及时指出~

ok我话说完

以上是关于java基础知识有那些的主要内容,如果未能解决你的问题,请参考以下文章

Java基础7:关于Java类和包的那些事

java基础之多态的那些事儿

那些让面试官直呼内行的Java知识点

转行Java后第一次面试某鹅被坑,那些一毕业就进大厂的程序员,有哪些秘诀?

有那些关于IT的书籍?

Java都需要那些技术?