C语言(内存分区、预处理、动态库)
C语言概述C语言的起源贝尔实验室的Dennis Ritchie在1972年开发了C,当时他正与ken Thompson一起设计UNIX操作系统,然而,C并不是完全由Ritchie构想出来的。它来自Thompson的B语言。
使用C语言的理由在过去的几十年中,c语言已成为最流行和最重要的编程语言之一。它之所以得到发展,是因为人们尝试使用它后都喜欢它。过去很多年中,许多人从c语言转而使用更强大的c++语言,但c有其自身的优势,仍然是一种重要的语言,而且它还是学习c++的必经之路。
高效性。c语言是一种高效的语言。c表现出通常只有汇编语言才具有的精细的控制能力(汇编语言是特定cpu设计所采用的一组内部制定的助记符。不同的cpu类型使用不同的汇编语言)。如果愿意,您可以细调程序以获得最大的速度或最大的内存使用率。
可移植性。c语言是一种可移植的语言。意味着,在一个系统上编写的c程序经过很少改动或不经过修改就可以在其他的系统上运行。
强大的功能和灵活性。c强大而又灵活。比如强大灵活的UNIX操作系统便是用c编写的。其他的语言(Perl、Python、BASIC、Pascal)的许多编译器和解释 ...
大学生活
大一大一上册学校教的C语言,那时候自己什么都不懂,就懂每天写代码,听着学长说代码多写就好了,然后自己就努力地多写,然后就感觉很难。然后自己也会去实现一些简单的C语言的例子,比如控制电脑关机,自己去做一些简单的小游戏,比如贪吃蛇等等。仍然保持着强烈的学习欲望和求职欲望,不断学习才知道自己是有多么菜!!!
下册学的数据结构,然后中午不睡觉,用C把大部分的数据结构和一些算法都实现了一遍,比如链表,栈,队列,树,图。至今令人非常感人….依然很菜很菜。如下图:
大一寒假开始接触前端,但是感觉自己学的很菜,也没懂原因,可能有好的资源能够帮你更好地入门,有了好的资源能够帮你更加快速地建立知识体系,能够快速学习!!!后来我找到黑马的2018版的资源,那时候的视频还是很好的。我也自学完html,css,js,jquery,bootstrap,canvas,h5,css3,还有就是移动适配,自己经常去实现一些简单的小例子,比如轮播图,比如tab栏切换,总之大部分的效果都可以用js去手写出来,自己也找到了一个很好的网站,自己去模仿里面的一些资源,也自己去模仿一些网站的主页。比如自己去模仿京东的首页,还有自 ...
Spring面试题
什么是Spring框架?Spring框架有哪些主要模块?Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。
Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。
Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。
Spring框架至今已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。
spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。
spring jdbc:提供了一个JD ...
MyBatis面试题
谈谈你对 MyBatis 的理解?
Mybatis是⼀个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需 要花费精⼒去处理加载驱动、创建连接、创建 Statement 等繁杂的过程。程序员直接编写原⽣态 SQL,可以 严格控制 SQL 执⾏性能,灵活度⾼。
MyBatis 可以使⽤ XML 或注解来配置和映射原⽣信息,将 POJO 映射成数据库中的记录,避免了⼏乎所有的 JDBC 代码和⼿动设置参数以及获取结果集。
通过 XML ⽂件或注解的⽅式将要执⾏的各种 Statement 配置起来,并通过 Java 对象和 Statement 中 SQL 的 动态参数进⾏映射⽣成最终执⾏的 SQL 语句,最后由 MyBatis 框架执⾏ SQL并将结果映射为 Java 对象并返 回。(从执⾏ SQL到返回 Result 的过程)
MyBatis 编程步骤
创建 SqlSessionFactory 对象。
通过 SqlSessionFactory 获取 SqlSession 对象。
通过 SqlSession 获得 Mapper 代理对象。
通 ...
ThreadLocal全面解析
ThreadLocal全面解析前置知识
具有一定的javase和javaweb基础
熟悉synchronized关键字
熟悉HashMap
熟悉 JDBC技术
ThreadLocal介绍官方介绍/**
* This class provides thread-local variables. These variables differ from
* their normal counterparts in that each thread that accesses one (via its
* {@code get} or {@code set} method) has its own, independently initialized
* copy of the variable. {@code ThreadLocal} instances are typically private
* static fields in classes that wish to associate state with a thread (e.g.,
* a user ID ...
UML
UML概述为什么需要建模建模是为了理解事物而对事物作出的一种抽象,是对事物的一种通用、明确的书面描述。假如让你建造一栋属于自己的房子,你第一件思考的事情是什么?是思考去哪里买什么材料吗?非也!你一般会先了解建筑的大小、形状,进而做出相应的规划与图纸,甚至模型。如果在规划过程中有更好的想法,还可以不断对图纸和模型进行调整,直至满意后才开始动工。
为什么需要语言日常生活中,我们都用普通话进行交流,看起来稀疏平常,但是如果存在地域差异的话(如胡建人),那就很容易引起误会或笑话。
在各类编程语言的世界里,大家可以通过编程语言(如Python、Java)所特有的语法进行交流,Linux之父Linus曾说“Talk is cheap. Show me the code.”,代码是程序员最好的沟通工具。但是,身为资深Python程序员的你确定能看得懂神级Java程序员写的代码吗?这时候再Show the code就变得毫无意义了。
UML由来面向过程把世界看作是由一个个相互关联的小系统组成,每个小系统都有着明确的开始和明确的结束,开始和结束之间有着严谨的因果关系。常见的面向过程编程语言有C、Fo ...
String
三个问题
1、Java 内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小?
2、String 类型在执行连接操作时,效率为什么会比 StringBuffer 或者 StringBuilder 低? StringBuffer 和 StringBuilder 有什么联系和区别?
3、Java 中常量是指什么?String s = “s” 和 String s = new String(“s”) 有什么不一样?
Java 内存分配JVM 的体系结构包含几个主要的子系统和内存区
垃圾回收器(Garbage Collection):负责回收堆内存(Heap)中没有被使用的对象,即这些对象已经没有被引用了.
类装载子系统(Classloader Sub-System):除了要定位和导入二进制class文件外,还必须负责验证被导入类的正确性,为类变量分配并初始化内存,以及帮助解析符号引用.
执行引擎(Execution Engine):负责执行那些包含在被装载类的方法中的指令.
运行时数据区(Java Memory Allocat ...
Netty入门-第三话(转载)
尚硅谷的源码部分暂时不再记录笔记,因为我觉得源码这东西,韩老师讲的不太好,弹幕和评论也有说。源码这东西,先把入门的消化一下,然后通过书或者博客来看源码会比较好,你只有先会用,看源码才会有感觉。
Google Protobuf编码和解码的基本介绍
编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码[示意图]
codec(编解码器)的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据
Netty 本身的编码解码的机制和问题分析
Netty 自身提供了一些 codec(编解码器)
Netty 提供的编码器
StringEncoder:对字符串数据进行编码。
ObjectEncoder:对Java对象进行编码。
Netty 提供的解码器
StringDecoder,对字符串数据进行解码
ObjectDecoder,对 Java 对象进行解码
Netty 本身自带的 ObjectDecoder 和 Obj ...
Netty入门-第二话(转载)
Netty 概述原生 NIO 存在的问题
NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。
需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。
开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。
JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU100%。直到 JDK1.7 版本该问题仍旧存在,没有被根本解决。
Netty 官网说明官网:https://netty.io/
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protoco ...
Netty入门-第一话(转载)
因为学netty的过程中,发现计算机网络和操作系统蛮重要的,所以接下来会写几篇这方面的文章,希望读者不要觉得我东写一点,西写一点。
比如netty中有操作系统里的IO,零拷贝。有计算机网络里的通信(因为netty本身就是一个网络应用框架)。等等
Netty简介Netty 的介绍
Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。
Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。
Netty 主要针对在 TCP 协议下,面向 Client 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。
Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景。
要透彻理解 Netty,需要先学习 NIO,这样我们才能阅读 Netty 的源码。
相对简单的一个体系图
Netty 的应用场景互联网行业
互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这 ...
Redis面试题
Redis是什么?简述它的优缺点?Redis本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘上进行保存。
因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value 数据库。
优点:
读写性能极高, Redis能读的速度是110000次/s,写的速度是81000次/s。
支持数据持久化,支持AOF和RDB两种持久化方式。
支持事务, Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
数据结构丰富,除了支持string类型的value外,还支持hash、set、zset、list等数据结构。
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等特性。
缺点:
数据库容量受到物理内存的限制,不能用作海量数据的高性能读 ...
计算机网络面试题
计算机网络概念计算机网络:是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。
这里需要注意的是,按分布范围,计算机网络里有局域网LAN和广域网WAN, 其中局域网的代表以太网,以及这两种网络最重要的区分点,局域网基于广播技术,广域网基于分组交换技术。
衡量计算机网络的性能的指标速率速率就是数据传输(数据是指0和1)的速率,比如你用迅雷下载,1兆每秒,来衡量目前数据传输的快慢。它是计算机网络中最重要的一个性能指标。
带宽在计算机网络中,网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量,比如说你家的电信网络是100兆比特,意思是,一秒内最大的传输速率是100兆比特。
吞吐量吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。
以上三点,我们举个案例
一条路每秒最多能过100辆车(宽带就相当于100辆/秒)。
而并不是每秒都会有100辆车过,假如第一秒有0辆,第二秒有10辆…,(但是最多不能超过100辆)。
所以有第1秒0辆/秒,第2秒10辆/秒,第3秒30辆/秒,这不能说带宽多少吧,于是就用吞吐量表示具体 ...