搜索引擎优化高级编程(如何成为看起来像是有基础的人(一)(组图))
优采云 发布时间: 2021-11-11 05:08搜索引擎优化高级编程(如何成为看起来像是有基础的人(一)(组图))
是时候放弃你的技能树了。踩了很多坑,走了很多弯路。希望我的一些经验可以对你有所帮助。(完全自己整理,是技能树,更像是自己的一些学习计划,如果图片看不清楚,可以私信问我)
接触编程有一段时间了,工作一年,实习一年,学习两年。现在我在独小满,以前雄昌的FSG。
问题的核心不是如何成为一个看似有基础的人。基础好不好面试官会问几个问题,所以你现在要做的应该是比较基础的,编程这个其实99%的基础决定了你以后的天花板高度或者如何在科技的道路上,你可以走得更远。
话不多说,开始看知识点:
一般来说,这句话是:
精通一种语言,熟悉多种语言,熟悉常用互联网工具(mysql、redis、nginx、kafka等)。
1、计算机基础
计算机基础包括操作系统、计算机网络、数据结构、数据库、计算机系统(组成)、编译原理等。
你现在可能面临的是找工作,所以把你整理好:
数据结构->操作系统->数据库->计算机网络(粗略看一下应用层&传输层)
推荐资料:
数据结构:数据结构和算法(Java版实现),提供
操作系统:现代操作系统(机械工业出版社计算机科学丛书)
计算机网络:计算机网络自顶向下法
Database:数据库系统概念(可能有点无聊)
那么看完这部分,你可能已经达到了计算机基础的水平,找到了一些类似的工作,但是记住要深化剩下的编译原理和计算机基础的其他部分,把刚才提到的操作系统和计算机,网络,数据结构,必须再次深化数据库。
此时的一些信息推荐:
1、TCP/IP详解(Volumes一、Volumes二、Volumes三,总之,尽力而为,尽力而为,内容非常多,我也在学习中)
2、Unix下的高级编程&Unix下的网络编程(我们使用的大部分服务器都是Linux系统。既然是Java程序员,了解底层很重要,从Java语言层面到JVM操作系统。应该很熟悉)
3、Linux内核设计与分析
4、大华设计模式或丛书设计模式
2、Java 基础
Java的生态很大,它所依赖的其实是Java的两个组件:Java语言+Java虚拟机
Java语言部分:(注意Java版本)
Java语法一定很熟悉,比如Java面向对象编程,Java函数,类,继承,多态,接口,对象,IO等等。 高级一点,Java内部类,Java泛型,Java反射,Java并发,等等。
JDK部分:
Java集合包一定很熟悉。无论是日常工作还是面试,Java集合都是重点,比如List、Set、Map等。
Java Concurrent包下的类从底层基础开始,如CAS、atomic、AQS、CountDownLatch、ReentrantLock、ReadWriteLock等,以及ConcurrentHashMap等一系列并发安全结构。
然后是String相关的,StringBuilder,StringBuffer,StringUtils等。
这部分不仅要熟悉API,还要尽可能熟悉源码和原理。比如如何使用AQS构建可重入锁,如何实现公平与不公平,AQS如何避免惊险群效应。让我们更深入地了解 CAS 中如何实现原子操作,以及 UnSafe 和 VarHandle 之间的区别是什么。
Java虚拟机部分:(注意Java版本)
Java虚拟机的知识大致可以分为以下几类:
JVM内存结构,Java内存模型
Java垃圾采集(垃圾采集算法,垃圾采集器,专注parralel,G1、cms)
Java对象结构、Java类文件结构
Java JIT(这一个通常会介绍书中的几个参数,但值得研究,在研究过程中编译相关的方面会有很大的提升)
Java类加载机制、父委托模型、如何实现热加载、tomcat的类加载机制、ASM字节码操作等。
一旦熟悉了这些要点,就可以使用它来深入了解 Java 的一些语言特性和语法,例如:
1、泛型中的擦除
2、synchronized的实现原理
3、CAS如何实现原子操作?
4、CAS 依赖于 SMP 架构中的缓存一致性,因为一致性流量引起的总线风暴,以及其中的 MESI 协议。
5、Java 1. 为什么G1的吞吐量低于cms 8.
类似的问题还有很多。当你达到一定的知识积累水平后,你会逐渐面对这些问题。
另外,Java相关的框架,比如Spring、netty等,应该熟悉API,更懂源码。
推荐资料:
1、Java 编程思想
2、Java并发编程实践
3、深入理解Java虚拟机
看完这三本书,建议直接阅读JDK源码和官方文档(JDK &JVM)
3、常用互联网工具
Shell&awk&lua等脚本语言
之所以单独声明,是因为很多程序员写了N年代码,连最基本的shell和awk都不精通,查问题解决问题或者处理数据异常缓慢或者直接找不到合适的方法,重复一遍性工作太多,自动化太少。
MySQL
SQL一定要精通,SQL一定要精通,SQL一定要精通(不知道很多原理,你会不会上手SQL。在开发工作的数据处理方面,通常shell+SQL都可以解决99%的问题)
MySQL实际上更复杂。首先我们需要了解MYSQL的一些特性,主要是从InnoDB开始,比如内存模型,如何刷新脏页,写两次,redo undo等事务保证。然后是间隙锁、行锁、索引的实现结构。
再深入一点,可以看看InnoDB日志等。如果能用工具来解释十六进制日志就好了。看看Mysql写日志的一些方式。
推荐资料:
1、深入了解mysql InnoDB存储引擎
2、高性能 MySQL
Redis
Redis,不要只知道key-value结构之类的
SDS数据结构、quicklist结构、ziplist&hashTable、HASH等数据结构一定要清楚。
Redis持久化方式,以及它的区别和优势:AOF、RDB等
推荐资料:
请直接对照官方API阅读源代码。市面上虽然有一些书,但是Redis更新还是挺快的,有很多没有时效性的知识。
从用法来看,Redis 4.X 菜谱很不错
nginx
Nginx 在开发中也被大量使用。API首先要明确,其次,我觉得我们应该重点关注这种基于epoll的非阻塞异步IO单线程(进程)处理模型,用于多链接处理。
Kafka 或其他消息队列
在分布式应用中,消息队列几乎是必不可少的重要组件,通常用于服务解耦或异步处理。这个可以根据兴趣和应用场景来查看。在这里推荐卡夫卡
Hadoop、Spark等计算工具
这类计算工具大家应该尽量熟悉,不过在初级阶段,没必要深入,因为它可以使用。
4、分布式相关
Java可以说是构建分布式应用最常用的语言,工具很多而且非常强大。
统一按照这个维度学习:熟悉API->原理->源码
Spring(spring核心库(Ioc、AOP等,事务建立在此之上)、spring Boot、Spring Cloud,或者单独看一下Spring MVC),这里推荐,Spring For All玩最纯粹的技术!做最专业的Spring非政府组织~,有对应的群,这么多大佬
达博
动物园管理员
翟永超对服务的实际服务等
还有一系列关于分布式架构的书籍。这种知识不要太依赖书本。你应该看看一些经典的架构方案等。
简单来说,就是这样。最后,希望你以后能吃苦耐劳。