这是什么小程序?可以点出“力扣”界面、CSS、前端安全、计算机基础、设计模式等。

力扣网解题(一 两数之和)


简介 在前面几章我们已经介绍了Shell 脚本的编写规则与各种语句的具体应用,但是实际生产环境中, Shell脚本通常与正则表达式.文本处理工具结合使用。因此本章我们将介绍正则表达式与Linux系统中两个功能强大的文本处理工具。 grep的应用 ty.util.IllegalReferenceCoun...

客户分析是一个通过分析客户行为数据来了解和了解客户行为的过程。它的范围从简单的数据分...

%s与%r,%d,%f %r用rper()方法--表达式字符串方法--处理对象 %s用str()方法处理对象 在上边的例子中,输出的字符串%r,是带引号的,用%s输出就不带引号. 指定占位宽度(右对齐): 指定占位宽度(左对齐): format()实现科学计数法 格式符的词典调用 格式符的有关学习,可以参考:python中%s与%d - SuperCreators的博客 -

我就是自学半年然后投简历找实习,最后拿到携程、华为等offer。

说实话,学习六个月的时间,就要达到胜任工作的程度,有点难

培训班教的大多是面试相关的知识,跟实际开发还是有点差距的。就算找到了工作,到了工作岗位之后,你会发现在培训班学到的远远不够,还得自己下功夫去学习。

下面我分享下我的自学经历吧,希望对题主有所帮助,查漏补缺。


我本科学的不是计算机,大四开始自学Java,并且找到了中大厂的offer。自学路上遇到不少问题,每天晚上都是坚持到一两点才睡觉,最终也拿到了30w的offer

在这里也提醒学弟学妹们,要尽早确定以后的方向,读研还是工作,找工作的话,也要尽快确定工作岗位,想转行的,需要花更多的时间准备。很多同学到了大四快毕业的时候,才思考自己未来要做什么,这个时候已经有点晚了。如果错过了校招,走社招渠道去找工作,难度将会提升一个等级,到时后悔也来不及!

下面来说说自己的经历吧(附自学路线)。

大学以前基本没碰过电脑,家里没电脑,也没去过网吧。高中的计算机课程,期末作业要完成一个自我介绍的PPT,也不会做,最后直接抄同桌的作业(复制粘贴都不会。。还得同桌教,捂脸)。

高考完一个月后,买了电脑,真正开始使用上了电脑。

大一上学期的时候,系里开了一门C语言的课程,这也是我第一次接触编程。教材是英文的,刚开始学还是挺头大的。每次课程作业,周围的同学都是一顿复制粘贴,我也一样嘿嘿。

记得在讲指针那一章的时候,听的一头雾水。稍微走神,回过头来,已经不知道讲的是啥了。

后面系里开设了兴趣小组,因为平时比较闲,也想着去捣鼓点东西,就去参加了。刚开始的时候,什么都不懂,老师推荐我学一下51单片机,拿了一本厚厚的51单片机的书籍,跟着书里的demo敲了一遍,发现了新天地!原来编程这么有意思!

记得第一次跑出流水灯的时候,那叫一个激动啊,满满的都是成就感!后面也写了一些电机、红外遥控等demo。从那以后,激发了我学习编程的兴趣。

到了大二,辅导员在群里发布全国电子设计大赛的信息,参赛题跟四轴飞行器相关,那段时间对四轴飞行器比较感兴趣,于是约了两个小伙伴一块参加。距离比赛时间只有一个月,在那一个月的时间里,每天都是早出晚归,吃饭的时候还在想着哪一块代码出了bug。虽然最后没能获奖,但是在这个过程中,学到很多知识,编程能力也有了很大的提升。

转眼间,大三开学,开始纠结考研还是工作,思考了一周时间,也进了系里的实验室体验了一把研究生生活,最后还是听从内心的想法,决定直接找工作。

我咨询了本专业的师兄师姐们往年的就业情况,他们大部分人还是找了互联网方向的工作。有一个在传统行业的师兄,也劝我投互联网公司的岗位,因为在传统行业加班也不少,但是工资贼低。。最后决定转行程序员,找后端相关的工作。

那么学习哪一种语言呢?当时有三个选择:c++,Java,python。

那段时间python比较火,但是经过一番深思熟虑之后,还是选择了Java。为什么选择Java呢?

很简单,市场需求大,学习难度适中。相比科班同学来说,我缺乏系统的计算机基础知识,而距离秋招也只有不到一年时间,所以还是选择学习难度低一点的Java。

确定方向后,便开始制定学习路线。不得不说,Java要学的东西是真的多。。

自学期间遇到挺多问题,比如一些环境配置问题,有时候搞上好几天,很打击积极性。中途也有很多次怀疑自己的水平,是不是不适合干编程,差点就放弃了。幸好最后还是坚持了下来。

半年多的时间,除了平时上课,其他时间就是在图书馆。周末或者节假日,每天都是7点起床,八点到图书馆开始学习,到了晚上十点,图书馆闭馆,才回宿舍,每天都是图书馆最后走的一批。回到宿舍,洗完澡,继续肝到十二点多(卷王!)。

很多人在问,大三才开始自学Java,来的及吗? 我觉得,还是看个人的投入程度和学习能力。有些人自学能力强一点,每天可以投入10小时及以上的时间去学习,那完全没问题。

自学过程还是挺辛苦的,要耐得住寂寞,最最重要的还是得坚持!

我根据自己的自学经历,整理了一些学习过程中踩坑总结的经验,希望自学的小伙伴可以少走弯路:

  • 注重实践,不要只是埋头看书,一定要多动手写代码。
  • 刚开始自学的时候,可以不用太深究细节,不然可能会怀疑自己的学习能力。等到后面有了一定的基础,回过头来重新回顾,可能会恍然大悟,没有当初想的那么难。
  • 可以适当加一些交流群,遇到不懂的知识点,多与其他人交流。

好了,下面给大家分享一下我的自学经验。

首先看一下Java学习路线图:

  • 《JAVA核心技术卷》

head first系列的书籍讲解比较有趣,比较好理解。《JAVA核心技术卷》难度相对适中,内容也比较全面,部分章节(如Swing)可以跳过。

视频推荐动力节点老杜的视频教程,1000w的播放量!视频总体上质量很不错,讲解挺详细,适合新手。跟着老杜的视频学下来,可以学到很多知识!

再次强调:多敲代码!多敲代码!多敲代码!

学习编程就是看书加实践,要多动手,不然看过的知识点很快就会忘,而且多实践也会遇到很多坑,丰富经验。 可以到github上找一些项目练练手,通过做项目巩固知识,而且每实现一个功能之后,会有满满的成就感,也会激励你不断去学习。

Java基础知识主要有:

  • Java语言基础、循环、数组 ; 了解类和对象
    • 掌握强制数据类型转换和自动类型提升规则;
    • 掌握类的概念以及什么是对象。
  • 数据类型、重写重载、封装继承多态
  • 常用类:String、时间类
    • 掌握IO读写流相关的类,了解字节流,字符流和字符流缓冲区;
    • 掌握线程的概念,多线程的创建、启动方式,锁和同步的概念及运用;
    • 掌握Socket通信的概念,如何声明客户端服务端,如何完成双端数据通信。

Java Web是一系列技术的综合,也是大多数Java开发者的技术方向。有必要学习一下。这部分可以看看视频教程。

视频推荐尚硅谷的JavaWeb全套教程,HTML/CSS/JavaScript等跟前端相关的可以倍速观看。

黑马程序员的Java web教程总体也不错

下面列举Java web需要掌握的知识点。

  • 掌握HTML的基本语法;
  • 表格的作用以及合并行、合并列;
  • 表单标签的使用,提交方式get/post的区别;
  • 掌握CSS的语法及作用,在html中的声明方式;
  • 掌握CSS布局的函数使用;
  • 掌握CSS外部样式的引入。
  • 掌握JS的语法及作用,在HTML中的声明方式;
  • 掌握JS中的变量声明、函数声明、参数传递等;
  • 掌握HTML中的标签事件使用;
  • 掌握JS中的DOM原型
  • 了解如何使用jQuery,下载最新版或者老版本的jQuery.js
  • 掌握选择器、文档处理、属性、事件等语法及使用;
  • 能够灵活使用选择器查找到想要查找的元素并操作他们的属性;
  • 掌握Java中的Web项目目录结构;
  • 掌握Servlet的基本运行过程。
  • 掌握Ajax的基本概念;
  • 掌握Session过滤器和编码过滤器
  • JSP中如何编写Java代码,如何使用Java中的类;
  • 掌握Session及Cookie的区别,存储位置,声明周期等;
  • spring:面向切面、依赖注入。
  • springboot:习惯优于配置、自动配置。目前很多公司内部都是使用Spring Boot。

大部分公司都会用到 Spring框架,必学!。主要理解 Spring 面向切面、依赖注入的特性,学会使用 Spring 构建应用程序。推荐书籍《Spring实战》,通过demo的方式带你一步步搭建Spring应用

视频推荐尚硅谷王泽老师的Spring5框架最新版教程,视频刚出不久,内容也是与时俱进,值得学习!

SpringMVC是基于MVC架构模式的轻量级Web框架,对于初学者,需要掌握Web请求从发出到相应的这个过程,SpringMVC做了什么,还有MVC模式的思想。

MyBatis 是一款优秀的持久层框架,MyBatis 帮助我们做了很多事情:建立连接、操作 Statment、ResultSet、处理 JDBC 相关异常等,简化了开发流程。推荐书籍《深入浅出Mybatis》。

视频推荐狂神说的Mybatis最新完整教程,b站播放量最高,获得了很多小伙伴的一致好评。

学完 SSM,就要进一步学习 SpringBoot 了,相信很多人在学了 Spring 之后,面对各种各样的配置,想必都会头疼。而 SpringBoot 的出现解决了这个问题,SpringBoot 去除了大量的 XML 配置文件,简化了复杂的依赖管理。书籍推荐《Spring Boot实战》。

视频推荐尚硅谷雷神的2021版最新SpringBoot2权威教程。

现在面试基本都会问到微服务相关的内容,最好了解下微服务相关的知识。服务注册与发现、负载均衡、服务降级、API网关等。推荐书籍《spring cloud微服务实战》

视频教程可以看看尚硅谷周阳老师的:

什么是并发编程,简单来说就是为了充分利用cpu,多个任务同时执行,快速完成任务。

并发编程的相关内容可以看看《JAVA并发编程实战》这本书。

视频推荐狂神说Java,很不错的视频:

用来缓存热点数据,加快读写速度,从而提高性能。现在Java后端的面试基本都会问到Redis。

书籍推荐《redis实战》和《redis设计与实现》。

视频推荐狂神说Java的Redis最新超详细版教程,不仅教你学Redis,还会教你学习的方式。

消息队列是基础数据结构中FIFO的一种数据结构,用来解决应用解耦、异步消息、流量削锋等问题,可以实现高性能、高可用、可伸缩和最终一致性。

视频推荐黑马的RocketMQ教程和百知教育的RabbitMQ教程,两者挑一个学习就可以!

【编程不良人】MQ消息中间件之RabbitMQ:

JVM也是面试经常会问的内容。Java开发者不用自己进行内存管理、垃圾回收,JVM帮我们做了,但是还是有必要了解下JVM的工作原理,这样在出现oom等问题的时候,才有思路去排查和解决问题。书籍推荐周老师的《深入理解Java虚拟机》。

视频推荐尚硅谷宋红康的全套课程,全套课程分为三个篇章:《内存与垃圾回收篇》、《字节码与类的加载篇》和《性能监控与调优篇》。

尚硅谷JVM全套教程:

  • jvm内存结构(程序计数器、虚拟机栈、本地方法栈、堆、方法区、运行时常量池、直接内存)

学编程一定要打好计算机基础!

对于非科班同学来说,与科班同学最大的差距在于基本理论知识。如果你是非科班自学编程的,想要进入大厂,那么计算机基础知识一定不能落下。

每一个合格的程序员,应该要知道计算机体系的结构,内在的逻辑是什么,要有自己的思考。

总之,基本功非常重要!

无论学习什么编程语言,和需要和操作系统打交道。如果对操作系统不熟悉,那么你在未来的学习路上将会遇到很多障碍,比如线程进程调度、内存分配、Java的虚拟机等知识,都会一头雾水。因此,只有把操作系统搞明白了,才能够更好地学习计算机的其他知识。

入门级别书籍:《现代操作系统》、《操作系统导论》,进阶:《深入理解计算机系统》

强推《深入理解计算机系统》 这本书。

CSAPP是一本很好的书,糅合了计算机组成原理、操作系统、网络编程、并行程序设计原理等课程的基础知识。对于刚接触编程,或者像大彬这种非科班出身的人来说,这是一本指导性的书,它会告诉你,要想成为一个优秀的程序员,应当重点理解哪些计算机底层原理,告诉你应该在以后的自学过程中,应该重点学习哪些课程,比如操作系统和体系结构等。

还有国内不错的操作系统的课程,清华大学的公开课:

由清华大学两位老师向勇、陈渝讲授,同时配有一套完整的实验,实验内容是从无到有地建立起一个小却五脏俱全的操作系统,以主流操作系统为实例,以教学操作系统ucore为实验环境,讲授操作系统的概念、基本原理和实现技术,为学生从事操作系统软件研究和开发,以及充分利用操作系统功能进行应用软件研究和开发打下扎实的基础。

另外,推荐另一门MIT操作系统课程:MIT6.268

MIT6.828 是一门非常值得学习的课程,广受好评,是理论与实践相结合的经典

只要你跟着项目一步一步走,做完 6 个实验,就能实现一个简单的操作系统内核。

每个实验都有对应的知识点,学完理论知识后会有相应的练习,学习体验非常棒!

建议在开始学习这门课之前先熟悉C和汇编,对计算机组成有一定了解。

  • 进程与线程的本质区别、以及各自的使用场景
  • 进程通信方法的特点以及使用场景
  • 进程任务调度算法的特点以及使用场景
  • 死锁的原因、必要条件、死锁处理。手写死锁代码、Java是如何解决死锁的。
  • 虚拟内存的作用,分页系统实现虚拟内存原理

为什么学习数据结构与算法?对于计算机专业的同学来说,这门课程是必修的,考研基本也是必考科目。对于程序员来说,数据结构与算法也是面试、笔试必备的非常重要的考察点。

数据结构与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面。数据结构也蕴含一些面向对象的思想,故学好掌握数据结构对逻辑思维处理抽象能力有很大提升。

《大话数据结构》和《算法图解》

《大话数据结构》 这本书最大的特点是,通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。这本书特别适合初学者。

《算法图解》是非常好的入门算法书,示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。

很多学Java的同学,可能会问有没有Java版本的数据结构和算法书籍?

当然有的,可以看看《数据结构与算法分析 java语言描述》这本书,用Java语言描述各种数据结构和算法,对于Java开发者来说,更容易理解。

UCSanDiego的数据结构与算法专项课程

浙大陈越姥姥的数据结构课程

浙江大学陈越姥姥和何钦铭教授联合授课,非常经典的课程。姥姥我的偶像!

小甲鱼的数据结构和算法课程

数据结构与算法主要学习以下内容:

  • 基本数据结构(数组、链表、栈、队列等)
  • 树(二叉树、avl树、b树、红黑树等)
  • 排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等及时间空间复杂度)
  • 动态规划、回溯、贪心算法(多刷刷leetcode)

学完感觉还很吃力?可以借助一些刷题网站巩固下。下面推荐几个刷题网站。

作为牛客红名大佬,来给牛客宣传一波!(牛客打钱!)

牛客网拥有超级丰富的 IT 题库,题库+面试+学习+求职+讨论,基本涵盖所有面试笔试题型,堪称"互联网求职神器"。在这里不仅可以刷题,还可以跟其他牛友讨论交流,一起成长。牛客上还会各种的内推机会,对于求职的同学也是极其不错的。

力扣,强推!力扣虐我千百遍,我待力扣如初恋!

从现在开始,每天一道力扣算法题,坚持几个月的时间,你会感谢我的(傲娇脸)

我刚开始刷算法题的时候,就选择在力扣上刷。最初刷easy级别题目的时候,都感觉有点吃力,坚持半年之后,遇到中等题目甚至hard级别的题目都不慌了。

与Leetcode类似的刷题网站。

LintCode的UI、tagging、filter更加灵活,更有优点,大家选择其中一个进行刷题即可。

互联网应用大多属于数据密集型应用,对于真实世界的数据密集型应用而言,除非你准备从基础组件的轮子造起,不然根本没那么多机会去摆弄花哨的数据结构和算法。

实际生产中,数据表就是数据结构,索引与查询就是算法。而应用代码往往扮演的是胶水的角色,处理IO与业务逻辑,其他大部分工作都是在数据系统之间搬运数据。在最宽泛的意义上,有状态的地方就有数据库。它无所不在,网站的背后、应用的内部,单机软件,区块链里,甚至在离数据库最远的Web浏览器中。

  • 《MySQL必知必会》

《MySQL必知必会》主要是Mysql的基础语法,很好理解。后面有了基础再看《高性能mysql》,这本书主要讲解索引、SQL优化、高级特性等,很多Mysql相关面试题出自《高性能MySQL》这本书,值得一看。

国内中国人民大学王珊老师的《数据库系统概论》:

计算机网络这门课需要学习计算机网络的概念、原理和体系结构,知道计算机分层结构,物理层、数据链路层、介质访问子层、网络层、传输层和应用层的基本原理和协议,掌握以 TCP/IP 协议族为主的网络协议结构,并且了解网络新技术的最新发展。

《计算机网络自顶向下方法》

这本书是经典的计算机网络教材,采用作者独创的自顶向下方法来讲授计算机网络的原理及其协议,自第1版出版以来已经被数百所大学和学院选作教材。书中从应用层讲起,然后展开,摆脱了从物理层开始的枯燥,直接接触应用实例,更能吸引读者的兴趣。而且,书上很多例子举的很好,生动形象。

视频推荐中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程。这门课是2020年秋科大自动化系本科课程录制版,可与中科大学生一起完成专业知识的学习。

另外还可以看看哈尔滨工业大学李全龙老师的计算机网络课程:

计算机网络核心知识点

  • 网络安全问题(CSRF、XSS、SQL注入等)

Linux 系统已经渗透到 IT 领域的各个角落,作为一名 IT 从业人员,不管你是专注于编程,还是专注于运维,都应该对 Linux 有所了解,甚至还要深入学习,掌握核心原理。

至少要熟悉常用的Linux命令。书籍推荐《鸟哥的linux私房菜》

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。对于具有丰富的开发经验的开发人员,学习设计模式有助于了解在软件开发过程中所面临的问题的最佳解决方案;对于那些经验不足的开发人员,学习设计模式有助于通过一种简单快捷的方式来学习软件设计。

为什么要学习设计模式:

  • 设计模式是从许多优秀的软件系统中总结出能够实现可维护性、复用的设计方案,使用这些方案可以避免做一些重复性的工作
  • 合理使用设计模式并对设计模式的使用情况进行文档化,将有助于别人更快地理解系统
  • 学习设计模式将有助于初学者更加深入地理解面向对象思想

创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将模块中对象的创建和对象的使用分离。

创建型模式包括工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。

结构型模式包括适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。

行为型模式包括策略模式、模板模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式等。

推荐秦疆老师基于Java讲解的23种设计模式视频教程。

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Maven 是一个软件项目管理工具,可以对 Java 项目进行全自动构建,管理项目所需要的依赖。Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。

Docker 是一个开源的应用容器引擎。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。

视频推荐广州云科的docker入门教程,非常详细。

很多同学初学Java都会遇到一个问题,不知道去哪里找Java的项目练手。以前我也遇到这个问题,现在在这里分享下一些比较值得学习的项目。

首先给大家推荐几个Java项目的视频教程,都是B站上的视频,风评很好,讲解也非常详细,有兴趣的可以看一下~

尚硅谷尚筹网Java项目实战开发教程:

尚硅谷Java微服务+分布式+全栈项目【尚医通】

下面也推荐几个Github上比较优质的开源项目。

newbee-mall 项目是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。

  • 优惠券列表、优惠券选择

在这里也分享一份非常棒的Java学习笔记,Github标星137k+!这份笔记主要Java基础、容器、Java IO、并发和虚拟机等内容,排版精良,内容更是无可挑剔。

需要的小伙伴可自行下载:

一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue的前后端分离的后台管理系统。项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。

项目提供了非常详细的文档,地址是

使用的技术栈也比较新,给作者点赞!

微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。项目加入常见的企业级应用所涉及到的技术点,例如 Redis、RabbitMQ 等。

码问社区。开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap。

V部落,Vue+SpringBoot实现的多用户博客管理平台!

【咕泡学院实战项目】基于SpringBoot+Dubbo构建的电商平台。业务模块划分,尽量贴合互联网公司的架构体系。所以,除了业务本身的复杂度不是很高之外,整体的架构基本和实际架构相差无几。

Guns是一个现代化的Java应用开发框架,基于主流技术Spring Boot2,Guns的核心理念是提高开发人员开发效率,降低企业信息化系统的开发成本,提高企业整体开发水平。

Guns基于插件化架构,在建设系统时,可以自由组合细粒度模块依赖,实现不同功能的组合和剔除,让项目体积灵活控制,从而更方便地搭建不同的业务系统。

使用Guns可以快速开发出各类信息化管理系统,例如OA办公系统、项目管理系统、商城系统、供应链系统、客户关系管理系统等。

音乐网站。客户端和管理端使用 Vue 框架来实现,服务端使用 Spring Boot + MyBatis 来实现,数据库使用了 MySQL

以上就是Java自学的学习路线,内容不少,转行的小伙伴们加油!

另外,上面提到的书籍,我已经整理了电子版,放到github上了,总共200多本经典的计算机书籍,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~(花了一个多月的时间整理的,希望对大家有帮助,欢迎star~)

码字不易,小伙伴们觉得有帮助的话,点个赞呗 你的赞就是我创作的动力!

我是 ,定期会分享Java后台硬核知识,欢迎大家关注~

Go其实是一个不严格是面向什么的语言,和传统的面向对象变成是有区别的。
go没有类的定义,但是结构体在使用上其实和类差不多,可以通过struct实现OOP特性。
去除了传统OOP的方法重载、构造函数和析构函数,隐藏了this指针
但是仍然具有面向对象的继承、封装和多态的特性,只不过实现传统面向对象的不一样,如继承不用extends关键字而是使用匿名字段实现。
Go语言严格区分大小写,入口执行函数是main(),不需要手动在语句末尾添加分号,编译器会自动添加。
是按照一行进行编译的,所以一行只有一个语句。如果有没有用的变量和包,是会报错的。

new是初始化一个指向类型的指针,new是内建函数,参数是一个类型不是一个值,返回值是指向这个类型0值的新分配的指针

make作用是初始化切片slice、集合map或者通道chan并返回其引用,也是内建函数。第一个参数是类型,第二个是长度,返回值是一个类型。

make只用来创建slice、map和chan并返回类型是T的初始化实例。

  • Printf():是把格式化字符串输出到标准输出,一般是屏幕,可以重定向
  • Sprintf():把格式化字符串输出到指定字符串中,比上面多一个char,是目标字符串的地址
  • Fprintf():格式化输出到一个stream流,一般输出到文件中

数组是具有固定长度且有零个或多个相同类型元素的序列,数组长度是数组类型的一部分,[3]int和[4]int是两个类型。
数组需要指定大小,否则会根据初始化自动确定,不可变,是值传递,作为参数直接传入的时候,是拷贝一份作为形参,而不是直接引用地址。
切片是储存相同类型元素的一个可变长度的序列,是一个轻量级数据结构,包含有指针、长度和容量。切片可以使用数组或者make初始化,可以不指定长度

  • go env:查看go的环境变量,比如如果需要更换代理就可以在这里查看
  • go run:编译并运行go源码文件
  • go get:动态获取远程代码包
  • go clean:清理工作目录,删除遗留的目标文件

协程和线程都可以实现程序的并发。
go中可以直接使用go关键词创建一个协程go runtine,在协程之间可以使用channel进行通信。
go的引用类型包含有哪些
数组切片、字典、通道和接口interface{}
和c语言差不多,&和*,前者对变量取地址,后者是取得指针所指向地址的数据。
main函数所在的包必须是main包
main函数可以使用flag包获取命令行传入的参数
RWMutex在读锁占用的时候,会禁止写操作,可以读
RWMutex在写锁占用的时候,会禁止任何goroutine读或者写操作,相当于全部独占

  • 无缓冲的channel是同步阻塞的,有缓冲区的channel是异步非阻塞的
  • 从关闭的channel接收消息,如果缓冲区没有消息,返回0

用来处理异步io的,最大的一条限制就是每个case里面必须是一个io操作,在语言级别支持select关键字
进程是资源的分配和调度的一个独立单元,线程是CPU调度的基本单元。
一个进程里面可以有多个线程,进程结束后所有线程都会结束,线程的结束不会影响进程以及其他线程。
线程共享进程的资源,包括寄存器、堆栈和上下文,一个进程至少有一个线程。
进程的切换资源消耗很大,效率低,县城切线的资源消耗一般效率一般,协程是小号最小的效率最高。协程的本质是当前进程在不同函数代码中切换执行,是一个用户层面的,可以是单线程多协程也可以是多线程多协程。
map本身是无序的,想有序的话只能通过对key处理。比如使用slice对key进行有序存放,然后通过slice的索引在map里面取值。

其底层原理就是在内存中实例化了一个hchan结构体,返回一个chan指针。
通道使用互斥锁mutex,让goroutine以FIFO的方式进入到结构体中,需要收发消息的时候,锁住结构体,缓存中的数据按照链表顺序存放,按照链表顺序读取
如果通道满了,继续发送消息会阻塞goroutine,原理是通过Go运行时的scheduler完成调度。
面向对象的三个特点:封装、继承和多态

  • 封装:将需要抽象的字段放在结构体中,之后给结构体绑定相应的抽象方法,即可实现封装
  • 继承:没有显式继承,通过结构体中嵌套一个结构体实现组合继承
  • 多态:给多个不同类型结构体绑定相同的方法,实现多态

我要回帖

更多关于 微信小程序扣款 的文章

 

随机推荐