JAVA学习曲线存技术讨论
Posted JAVA微讲堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA学习曲线存技术讨论相关的知识,希望对你有一定的参考价值。
我所带的班开做毕业项目,因此我空出一点时间,来写一篇技术文章,这篇文章是我写给对编程感兴趣或已经有一定编程经验的开发者,目的是给你打开编程思维或是解决编程思维瓶颈。本人才疏学浅,其中必然会有很多争议观点,如果你对这些争议真知灼见强烈希望你一针见血的给我指正。
一、基础篇
认识程序运行载体
1、 程序运行在哪里?
可能有人会毫不犹豫的回答,运行在计算机上。
2、程序又运行在计算机哪个位置?
运行在操作系统上,比如:windows,mac os,linux
3、操作系统到底是什么?
操作系统是一个程序,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁,操作系统是一个中间件(想一想阎婆惜,她让潘金莲与西门庆见面的场景)。
4、 程序又运行在操作系统哪个位置?
举例吧,比如:html、CSS、JS运行在操作系统的浏览器上(浏览器本身也是个软件),JAVA运行在JVM(JAVA虚拟机)上,pyhon也需预选安装一个python虚拟机(python标准库),而像C语言,很多操作系统都直接支持。
现在我们不难看到,JAVA号称跨平台,其实是JVM预选编写好与不同平台的接口调用,JAVA代码再调用JVM提供的统一的抽象接口,从而实现跨平台。
2、认识程序本身
1、程序能做什么?
程序按照我们输入的指令,按照我们预先设置的运行方式(算法)、输出我们预先知道的结果,这个结果不仅可以在终端显示,还可以操作机械(结果就是机械运作的指令)
程序到底由什么组成?
1)程序运行在内存,所以需要给代码开辟一个空间来存储,因为内存空间有限。开辟多大的空间则由JAVA的数据类型决定,所以我们需要学习JAVA的数据类型。比如:int 、float、String、等
2)程序的访问会有一个边界也就是作用域,JAVA的修饰符就是起这个作用,比如:private、public 等
3)程序是一个不会思考的笨蛋,它只会做逻辑判断和重复执行某件事。逻辑判断就是我们学的if...else ,重复执行就是while循环。其它的事情程序无能为力别去想什么人工智能了,在图灵机模型下那是妄想。
4)我们可以把一个重复执行的业务用if...else 或 while 封装起来,然后反复调用,这样面向对象就这样诞生了。我们把属性或方法封装到一个类中,然后反复的去使用这个对象。封装、继承、多态,这些都是面向对象的衍生。
3、我们开始进入JAVA的世界
1、JAVA为何如此牛逼
JAVA并不是世界上最优秀的语言,但是JAVA几十年长久不衰稳拿世界第一是因为JAVA多年来深入各行各业,积攒下了大量的组件和大数据环境下的解决方案、压力测试考验。由于JAVA的开源让很多大厂青睐,比如国内的阿里,更起关键作用的是我们最大的甲方项目——政府项目指定用开源语言。
JAVA需要学习哪些知识?
基础篇
1)安装JAVA虚拟机
2)JVM如何编译、运行JAVA代码
3)JAVA的数据类型
4)JAVA变量的使用
5)逻辑和循环语法,数组和基本数据类型的关系-->从数据结构去理解。学习几个算法比如冒泡、二叉、快速排序等 对自己逻辑思维进行锻炼
6)面向对象(封装、继承、多态)----->重点在多态的理解
7)面向对象设计的5条基本原则
8)如何利用多态进行代码的横向扩展,类与类的依赖关系
9)实例化对象的所有方式--->重点在反射的理解
10)多线程
11)多线程资源共享问题(生产者和消费者模式)、队列,协调多线程资源共享(锁)
12)对锁的深入理解
13)认识计算机的七层网络协议,认识TCP/IP协议
14)进程之间的数据传输,用socket实现
15)关系型数据库、索引、视图、存储过程
16)JDBC操作关系型数据库
应用篇
1)对http协议和TCP/IP协议进行彻底了解
2)对HTML、CSS、JS有一定的掌握
3)对servlet进行彻底的掌握,对servlet容器作用进行彻底的掌握
3)掌握对象容器spring
4) 掌握springMVC对servlet的封装和运行方式
5)掌握springboot自动化运行的方式和本质
掌握了以上知识,在软件公司就可以写代码挣钱了,但这时候你可能仅是一个coder,你会把ctrl+c+v用坏的。
提高篇
cloud
1)分布式的理解,重点在SOA与微服务的区分
2) 分布式治理:集中注册、集中配置、网关、负载均衡、熔断、MQ(数据传输解耦) 等
3)分布式协调 :节点之间数据共享、分布式事务 比如用:seata、redisson、zookeeper解决
4)分布式日志管理:ELK(Elasticsearch+Logstash+Kiabana)
5)分布式会话跟踪:JWT、共享session、Oauth2.0
IO流瓶颈
进入WEB2.0后,根据摩尔定律硬件的快速发展都被软件给消耗,但IO流的瓶颈一直都最棘手的问题。就拿手机网络来说2G-->3G-->4G--->5G都是在解决IO流瓶颈。
解决IO流的瓶颈最常用的方式是:负载均衡(你可以理解为冗余),就好比航天飞机需要装载多个发动机一样。
IO流的瓶颈分为服务器端和数据库端
1)服务器端的负载均衡: nginx服务器之间的负载均衡、微服内部注册服务器实现负载均衡
2)数据库的负载均衡:主从分离
3 )假如一个表有1亿条数据,就算一个线程查询也会非常慢,所以我们需要分表存储
4)查询总是那么频繁,查询数据库本质是在对文件进行读写,如果能在程序和数据库之间加一个缓存那就可以减少文件读写的频率。
5)如何使用缓存,缓存可能存在的问题
项目管理篇
1)项目构建:maven、Gradle,ant
2)版本控制:git、svn、gitee、gitlab、github
3)项目运行环境:linux、docker
4) 容器管理编排:compose、swarm 、k8s
5)DevOps:gitlab的CI/CD 、jenkins
1、如果你对编程感兴趣,可以联系陈老师,带你入门,目前陈老师为浪沃教育《分布式微服务》讲师。如果你身边有想学习编程的也可以推荐,推荐奖励:本科1000RMB 专科700RMB .
2、如果你是陈老师学生,已工作可以扫码加群,一起解决你工作中的技术难题。(注意:本群不收非陈老师学生,请谅解!)
3、陈老师微信:17713541218
微信群(注意:本群不收非陈老师学生,请谅解!)
以上是关于JAVA学习曲线存技术讨论的主要内容,如果未能解决你的问题,请参考以下文章