自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 LearnOpenGL_Day1

【代码】LearnOpenGL_Day1。

2023-07-29 22:59:04 211

原创 LearningOpenGL总结归纳之坐标系统篇

坐标系统五个重要的坐标系统局部空间(Local Space)世界空间(World Space)观察空间(View Space)裁剪空间(Clip Space)屏幕空间(Screen Space)为了将坐标从一个坐标系变换到另一个坐标系,需要经过MVP变换。局部空间顶点坐标起始于局部空间,在这里它被称为局部坐标,取个参照物就很好理解概念,局部坐标可以理解为相对于其他物体的坐标,它与世界坐标能够很好的区分开,世界空间坐标就是物体相对于整个场景的坐标。世界空间在某个游戏场景中,会存在非常

2022-04-13 21:46:02 418

原创 LearningOpenGL学习总结Day04

纹理(Texture)用大量的顶点来指定大量的颜色来丰富图像会造成巨大的开销,因此可以使用纹理来解决,纹理是一种2D图片,它可以为物体添加更多的细节。纹理的环绕方式(Wrap)因为纹理坐标的范围是(0,0)~(1,1)。如果一个图形的纹理采样在这个坐标的范围之外,那么OpenGL提供了四种方式来处理这种情况:GL_REPEAT:重复纹理图像(默认行为)GL_MIRRORED_REPEAT:也是重复纹理图像,但会以原纹理图的镜像模式重复GL_CLAMP_TO_EDGE:超出的部分会延续纹理的边缘

2022-04-12 23:21:10 465

原创 LearningOpenGL学习总结Day03

编写一个Shader类为了方便日后复习文章都是以笔记形式记录。由于每次创建shader都要经过繁琐的修改字符串、创建、合并这样的重复工作,因此将其抽象为一个类对象以方便代码的重复利用。Shader.h#ifndef SHADER_H#define SHADER_H#include <GL/glew.h>#include <iostream>#include <string>#include <fstream>#include <ss

2022-04-12 15:58:29 269

原创 LearningOpenGL学习总结Day2

1、图形渲染管线(Graphics Pipeline)图形渲染管线作用是将输入的原始图型数据经过一系列的变化最终显示在屏幕上的过程。其主要可以分为两个部分,第一部分是将3D坐标转化为2D坐标,第二部分是将2D坐标转化为实际有颜色的像素。这里提到的2D坐标和2D像素是不同的概念:2D坐标:平面上某个点的位置2D像素:某个点的近似值,其受到分辨率的限制2、着色器(Shader)图形渲染管线过程中的每个步骤都有一个对应的函数去实现,而且这些函数是可以并行执行的,所以在GPU上有许多的小处理核心,每

2022-04-12 00:05:26 393

原创 LearnOpenGL学习总结Day01

着色器在使用现代OpenGL来渲染时,至少需要设置顶点着色器和片段着色器这两个着色器。当然还有很多着色器,目前只学习到这两个着色器所以只总结这两个。1、顶点着色器(Vertex Shader)说是顶点“着色器”,但它与颜色并没有什么关系,每一个shader都是一个运行在GPU上的小程序,它们在渲染管线上的每一个环节起着各自的作用,而顶点着色器的主要作用提供顶点的位置坐标以便OpenGL能把这些数字转化为屏幕坐标,有几个顶点,它就会被调用多少次。2、片段着色器(Fragment Shader)片段着

2022-03-11 13:45:39 172

原创 I/O复用模型之select/poll函数

select1.原函数#include <sys/select.h> //需要包含的头文件#include <sys/time.h> //由于最后一个参数所以也要包含此头文件int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout); 其作用是进程使用该函数让内核等待多个事件种的任何一个发生,并且在只有一个或者

2022-02-16 19:21:04 304

原创 Unix网络编程小结——简单的服务器实现

1.前言要实现一个简易的服务器,需要几个步骤来与客户端建立连接,并接收客户端的数据进行处理。上图是实现TCP客户/服务器程序需要使用到的基本套接字函数。本篇以实现服务器端为主。2.sokcet()首先要调用socket函数得到一个监听套接字文件描述符作为起始,用于后续使用bind()和listen()使用时需要包含头文件“#include <sys/socket.h>”。server.cpp#include <sys/socket.h>int main(int a

2022-02-13 22:06:58 1152

原创 错误修改了usr目录的权限导致Linux开机卡在started update utmp about...解决方案

在学习Linux基础时 使用chmod错误修改了usr目录的权限chmod a-x usr导致su -命令失效,重新启动虚拟机时卡在了started update utmp about…这里。解决方法:在开机过程中 按ctrl + alt + f2 可以更改登录用户 此时在命令行里用root登录并将usr权限更改回来并重新启动即可。...

2022-01-19 00:10:22 5146 2

原创 C++的强制类型转换

前言C++强制类型转换的格式有两种:typename(value);(typename)value;第二种是C语言的风格,第一种C++风格,因为这种格式就好像是函数调用,更有感觉。另外由于C语言中的强制类型转换并没有严格的限制,所以C++引入了四种强制类型转换运算符。可以根据不同的情况,选择合适的强制转换运算符。文章目录前言1.dynamic_cast2.const_cast3.static_cast4.reinterpret_cast1.dynamic_cast该运算符的作用是在有继承

2022-01-14 21:32:12 5761 2

原创 用C语言来理解C++之this关键字

1.类#include <stdio.h>struct A { int x; int y;};新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;全新的 KaTeX数学公式

2022-01-06 23:12:29 746

原创 Debug启动Tomcat报错

Debug启动Tomcat报错在项目过程中遇到Run启动Tomcat没有问题,而Debug启动Tomcat却出现报错。异常信息如下Application Server was not connected before run configuration stop, reason: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception

2020-09-26 15:31:47 2349 1

原创 String、StringBuffer和StringBuilder的区别

String、StringBuilder和StringBuffer的区别:1、不可变性String类内部维护一个final修饰的字符数组,所以String是一个不可变的对象。而StringBuilder和StringBuffer都继承自AbstractStringBuilder,内部的字符数组并没有被final修饰,所以是StringBuilder和StringBuffer是可变的。2、线程安全由于String不可变,所以String是线程安全的。而同是继承自AbstractStringBu

2020-09-26 11:36:44 316

原创 [JVM基础]GC垃圾回收

文章目录一、概述二、垃圾判断1、引用计数算法2、可达性分析算法3、引用三、垃圾收集算法1、分代收集理论2、标记-清除算法3、标记-复制算法4、标记-整理算法小结一、概述垃圾收集器(Garbage Collection,简称GC)。三大问题:哪些内存需要回收?什么时候回收?如何回收?​ 栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配回收都具有确定性,在这个几个区域内就不需要过多考虑

2020-08-19 17:48:48 293 2

原创 并发基础:线程的基本操作

使用多线程来代替多进程进行并发程序的设计,是因为线程的切换和调度的成本要远远小于进程。线程的基本操作1.1 新建线程Thead t1 = new Thread();t1.start();线程start()后会新建一个线程并让这个线程执行run()方法。1.2 终止线程stop()的问题:stop()方法会强制终止一个线程,这可能会导致数据不一致的问题,这样做是不安全的。可以用一个标记变量,用于指示线程是否需要退出。1.3 线程中断严格讲,线程中断并不会线程立即退出,而是给线程发送一个

2020-08-15 19:05:00 177

原创 [JVM]Java内存区域和HotSpot虚拟机对象探秘

一、运行时数据区域1.程序计数器(Program Counter Register)当前线程所执行的字节码的行号指示器。    为了线程切换后可以恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。    如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是一个本地(Native

2020-08-05 22:31:37 242 1

原创 二叉树的遍历

遍历二叉树(Traversing binary tree)概念:是指从根节点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问一次且仅被访问一次。遍历方式:前序遍历中序遍历后序遍历层序遍历树结点:public class TreeNode{ public int data; public TreeNode lChlid; public TreeNode rChild; public TreeNode(int data) {

2020-07-26 13:25:54 119 1

原创 排序算法之选择排序

选择排序核心思想从数组中找出最小的元素,与第一个元素交换,这个时候已经确定了其位置,再从剩余的元素中找出最小的元素与剩余元素中的第一个交换,直到剩余元素只剩下一个时,排序结束。性能分析对于长度为N的数组,选择排序需要大约N2/2次比较和N次交换。所以时间复杂度为O(n2),空间复杂度为O(1)。特点1、运行时间与输入无关已经有序的数组或者主键全部相同的数组和一个元素随机排列的数组所用的排序时间一样长。2、数据移动是最少的每次交换都会更改两个数组元素的值,因此选择排序用了N次交换,交换次数

2020-07-21 12:10:15 177 2

原创 HashMap中get/put方法源码分析

HashMap无序,存储与取出的顺序不相同;不可重复,存储的数据不能重复。底层数据结构为哈希表,哈希表又称为散列表,是由数组和单向链表的组合形成的数据结构。JDK8之后,当链表长度达到8时,则会转化为红黑树。存取原理:1、put(k, v)第一步:先将key,value封装到一个node节点中。第二步:底层调用hashCode()计算hash的值,并通过哈希函数的算法将hash值转化为数组下标,如果下标位置上没有任何元素,就把Node添加到这里;如果下标位置上有链表,会用指定key与链表上的节点

2020-07-18 17:13:05 381

原创 生产者消费者模式实现交替输出

生产者消费者模式实现交替输出学完并发之后的小练习,使用生产者消费者模式实现交替输出数字,t1线程输出奇数,t2线程输出偶数,两个线程共享Num对象(临界区)。代码如下:package tread;public class ThreadPractice { public static void main(String[] args) { Num num = new Num(1); Thread t1 = new Thread(new PrintOdd(num

2020-07-16 17:41:13 815

原创 [JavaSE]集合学习小结

文章目录集合集合结构图(常用)Collection接口中的方法IteratorList接口List的特点:List中的方法(特有的、常用的):ArrayList优点:缺点:LinkedList优点:缺点:Vector线程不安全变成线程安全SetTreeSet比较器的选择:Map接口HashMap存取原理:初始化容量集合之间的转换集合也可以叫做容器,可以容纳其他类型的数据。所有的集合类和接口都在java.util包中集合中存储的是对象的内存地址。本篇中基本上只归纳了一些比较常用的集合类,其他的可以通过

2020-07-11 10:57:01 114

原创 [JavaSE]异常归纳总结

文章目录异常异常类的层次结构异常的分类异常的处理异常的方法(常用)异常的检查finally关键字finally的使用不会执行的finallyfinal、finally、finalize的区别自定义异常异常异常类的层次结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0nDLQMje-1593764440952)(F:\Typora\MyNotebook\异常.assets\image-20200703144454414.png)]Error类层次结构描述了Java运行

2020-07-03 16:24:47 156

原创 [JavaEE]Servlet学习总结

开篇为了以后学习框架,为今后的学习奠定一点基础,学习了Servlet的相关知识,接下来对此阶段的学习进行一个回顾和总结。Servlet简介Servlet是Sun公司指定的一个用来开发动态Web的一个规范,是一个接口。Servlet是JavaWeb三大组件之一,三大组件分别是:Servlet程序、Filter过滤器、Listener监听器Servlet是运行在Web服务器上的一个Java程序,它可以接收客户端发送过来的请求,并响应数据给客户端,通常通过HTTP(超文本传输协议)接收和响应来自Web

2020-06-26 21:29:16 142

原创 使用c3p0数据库连接池连接时出现错误:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

连接时出现如下错误:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector解决方案:导入c3p0的jar包之后还应导入:mchange-commons-java-0.2.15.jar这样就完美解决啦!下载链接

2020-06-24 19:30:31 526 1

原创 [JavaSE]难以理解的接口真叫人头大

文章目录接口概念特点接口与抽象类静态和私有方法接口在开发中的作用接口接口(interface)用来描述类应该做什么,而不需要描述应该具体如何做。一个类可以实现(implement)一个或多个接口。编译之后也是一个.class字节码文件概念接口不是类,而是对希望符合这个接口的类的一组需求。特点接口中的所有方法都自动是public方法。(但在实现接口时,必须把方法声明为public)接口中只可以定义常量和方法,但绝对不可能有实例字段。接口与抽象类学习接口的时候会有一个疑问:为什么要那

2020-06-19 23:32:00 167

原创 [JavaSE]面向对象三大特性的理解和总结

文章目录封装目的作用举例说明继承基本思想优点与缺点举例说明多态前提条件利弊注意封装使用关键字private。目的不让类中的方法直接访问其他类的实例字段作用提高了程序的重用性和可靠性。举例说明public class Student{ private int sno; public int score; ...}尝试擅自更改Student对象的属性:发现:被定义为private的字段sno无法被调用及更改,而score却能够在另一个类中任意更改。此时,体现出了封装的重要性。继

2020-06-19 09:29:05 183

原创 [JavaSE]有关抽象类的概念与思考

抽象类相关概念:使用关键字abstract定义的类即为抽象类。包含一个或多个抽象方法的类,必须声明为抽象类。而且这些方法必须在其子类中实现。值得注意,抽象类中也可以存在普通的字段和方法。扩展抽象类的两种选择:1、在子类中保留一部分或全部的抽象方法仍未定义,这样的话子类也必须声明为抽象的。2、在子类中实现所有的抽象方法,这样子类就不是抽象的了。抽象类不能被实例化。但是可以定义一个抽象类的对象变量,引用子类的对象。例如:public abstract class Person{ ...

2020-06-16 23:21:18 125 1

原创 [JavaSE]面向对象特性之继承

文章目录继承(inherit)基本思想超类和子类覆盖方法子类构造器多态阻止继承:final类和方法强制类型转换继承(inherit)先上一段代码!class A{ ...}class B extends A{ //B类继承了A类 ...}继承使用关键字extends,意为扩展的意思。extends关键字就是在构造新类派生于一个已存在的类。基本思想继承的基本思想就是基于已有的类创建新的类。作用:继承已存在的类可以复用这个类的方法,而且可以在此基础上增加新的方法和字段,使新的类能够适

2020-06-15 23:03:40 141 1

原创 [JavaSE]静态字段与静态方法

静态字段与静态方法提到静态,就跟关键字static密不可分。静态字段理解首先,你可以在变量前加上关键字static。静态字段它只属于类,而不属于任何单个的对象,而对于非静态的实例字段,每个对象都有自己的一个副本。例如:class Student{ private static String uniformColor = "black"; //校服颜色 private int score; //成绩 ...}上例中,校服的颜色这个实例字段对于同一个学校的学生来说都是一样的。也就是

2020-06-14 21:43:22 135

原创 数据结构图的存储方式之邻接表的实现

邻接表由于邻接矩阵对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的所以,考虑另外一种存储结构方式,用单链表存储每个顶点vi的所有邻接点,一维数组还是存储各个顶点。这种数组与链表相结合的存储方法称为邻接表。例如:带权值的网图:邻接表表示为:Java实现:顶点类package DataStructure.Graph.AL;public class VertexN...

2020-02-26 18:37:10 270

原创 手动简单实现数据结构图的存储方式之邻接矩阵

邻接矩阵(Adjacency Matrix)用两个数组来表示图。一个一维数组存储顶点,一个二维数组存储边或者弧。Java实现package Graph;import java.util.ArrayList;import java.util.List;public class AdjacencyMatrix<T> { private List vertex; ...

2020-02-25 22:52:58 94

原创 Java学习——部分继承相关知识总结

1.阻止继承:final类和方法不允许扩展的类可以用final修饰符。特定方法也可以被声明为final,这样做的话子类就不能覆盖这个方法。(final类中的所有方法自动地称为final方法)。2.抽象类是一种祖先类,使用abstract关键字定义,为了提高程序的清晰度,包含一个或者多个抽象方法的类必须被声明为抽象的。抽象类不能被实例化。3.受保护访问protected只能由同一个包中...

2020-01-22 23:43:55 142

原创 Java学习--类和对象以及部分继承知识总结

1.类类是构造对象的模板或者蓝图。由类构造对象的过程叫做创建类的实例。封装实现封装意义在于绝对不能让类中的方法直接访问其他类中的实例字段。只能通过对象的方法与对象数据进行交互。可以提高重用性和可靠性。2.对象对象的三个特性:(1)行为(2)状态(3)标识3.类与类之间的关系依赖——“use-a”聚合——“has-a”继承——“is-a”用var声明局部变量如果可以从...

2020-01-19 17:01:58 101

原创 HTML学习日志Day2

HTML基础HTML5全局属性1.contentEditable属性介绍主要功能是允许用户可以在线编辑元素中的内容。contentEditable是一个布尔值,可以被指定true或false。示例<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>c...

2019-11-25 21:18:43 107

原创 HTML学习日志Day1

HTML基础基本的结构元素div:在文档中定义一块区域,包含框、容器。span:在文本行中定义一个区域,即行内包含框。p:定义段落结构h1~h6:标题1到标题6定义不同级别的标题。ol:根据一定的排序进行列表。ul:没有排序的列表。li:每条列表项。dl:以定义的方式进行列表。hr:定义水平线。代码实现:<!DOCTYPE html><html>...

2019-11-24 16:30:34 201

原创 C语言返回结构体类型值的函数实现 求某年某月某日是这一年的第几天(学习记录)

求某年某月某日是这一年的第几天利用返回结构体类型值的函数知识点实现#include<stdio.h>struct date{ int day; int month; int year; int year_day; };int day_tb[][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,...

2019-11-14 21:06:16 560

原创 蓝桥杯基础练习 字母图形

蓝桥杯基础练习 字母图形问题描述利用字母可以组成一些美丽的图形,下面给出了一个例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。输出格式输出n行,每个m个字符,为你的图形。样例输入5 7样例输出A...

2019-10-24 21:04:07 91

原创 求两个整数的最大公约数

两种方法解决求两个整数的最大公约数1.辗转相除法分析:①若a>b(b>a),用a除以b(b除以a),余数存于r;②如果r不为0,则将b的值赋给a,r的值赋给b,重复①,否则执行③;③输出b(a)的值,它就是最大公约数。程序:#inlcude<stido.h>...

2019-10-03 11:00:10 724

原创 第一篇博客

从一个小白开始胖友们大家好,我是一只小白。最初选择软件工程专业,其实只是因为自己对计算机方面的知识感兴趣。还不知道这个专业要学的是什么,都涉及哪些领域。不知不觉如今已经大三了,对此也有一定的认识,但在技术方面我认为自己仍然还是一个菜鸟。所以从一篇博客开始,对自己的未来进行初步的规划。我学习编程,目标是为了进入我喜欢的游戏行业,也许我不是一名疯狂的游戏玩家,但我对制作游戏十分感兴趣,我想成为...

2019-09-27 16:42:22 169

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除