- 博客(34)
- 问答 (1)
- 收藏
- 关注
原创 Go语言文件处理
这里会将文件的内容进行读取,然后放入缓冲区内,然后只需要对这个对象进行readstring读取即可,那么有人会问这个底下是只有readstring函数吗,假如是要读取int什么的类型怎么办,这个非常简单,它的底下也存在着int一类的函数,那么有一个问题是不能确保每一个数据都是这个类型,那么我可以得到的可能性会下降,这样的话我还是建议直接使用readerString函数,那么在结束之后可以对文件结尾进行判断是否到达文件末尾,到达之后进行退出即可。这里注意,基本上是不需要对文件缓冲区进行处理的。
2023-01-16 22:35:13 256
原创 外部排序和大小堆相关知识
它的插入和查询复杂度都是 log(n),可以说比较高效。不过,堆调整时,每个节点都需要和左右孩子进行比较,即需要两次比较,在外部排序中,也就是需要读取两次外存,那能不能再优化下呢?于是,研究出了胜者树。胜者树只需要和兄弟节点进行比较,减少了一般的比较量。但是,胜者树还需要从父节点取一次值,并且,因为新插入的值取代了原先的最优胜者,这个新值向上调整的过程中,必定需要修改父节点的值,即必须要更新胜者。那能不能再优化呢?既然有胜者树,那自然也有败者树。败者树解决了胜者树存在的弊端,只需要和父节点比较一次,
2022-06-25 18:16:59 304
原创 线程池学习
在前面几篇博客中大体讲述了线程的大体思想和面对一些特殊多线程的处理现在出现了新的问题,当我想要处理线程问题的时候,我不可能一直处于创建和维持线程的存在,那么这个时候需要做的是想要创建一个新的东西,在里面存在很多或者足够使用的线程,当我需要在处理需要开辟一个新线程问题的时候,我可以在这个地方进行获得线程来处理这个事情,而在处理结束之后可以将线程从新放回线程之前所在的位置。为了达到这个目的,前人创建了一个新的概念叫做线程池。做一个简单的比喻,生,官方说法线程作为进程执行的最小单位。线程池字面上理解就是一堆线
2022-05-26 21:57:55 103
原创 synchronized浅析
synchronized在线程中最重要的功能还是保护线程安全,在线程处理的时候十分容易出现对数据的同时调用,这个时候出现问题主要是在面临线程处理了两次,但在这两次里面,实际上得到答案只得到了一次。那么为了解决这样的问题,必须要在处理一个计算某个在多个线程中同时出现的问题的时候直接避免其他线程也得到这个变量或者算式。那么在java之前的版本中更多实现的Volatile。在使用的时候出现了可见性的问题。类似在现在医院里面假如已经充满了患者的情况下,救护车没有可见性的话可能依然将病人带入这个医院,但到达之后才
2022-05-23 21:49:45 141
原创 线程相关点
在线程当中经常会遇到各种的特殊的办法,虽然不可能每一个办法都可以记得住,但要对其中比较常见的办法进行理解和记忆比如说获得当前线程对象,其名字或者对其改名可以static Thread currentThread() 获取当前线程对象 String getName() 获取线程对象名字 void setName(String name) 修改线程对象名字 通过这三个办法进行相关的操作,但大部分的办法操作相比于这三个看起来会简单一些据个例子,在示范代码当中存在这样的代码
2022-05-23 18:03:07 96
原创 BlockingQueue源码
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Founda.
2022-05-22 13:48:37 149
原创 线程中常用方法
在object类方法当中,主要对wait和notify两个大类的办法有提示,如果做简单的学习可以只记住这几个办法即可void notify()唤醒在此对象监视器上等待的单个线程void notifyAll()唤醒在此对象监视器上等待的所有线程void wait( )导致当前的线程等待,直到其他线程调用此对象的notify( ) 方法或 notifyAll( ) 方法void wait(long timeout)导致当前的线程等待,直到其他线程调用此对象的notify() 方法或 n
2022-05-21 14:54:26 104
原创 线程学习(二)
中断线程在学习Java要注意到,Java更多的是应用在系统当中,系统如果收发一个很大的文件的话,很容易让人对这个事情感到厌烦,所以在使用线程的时候经常要考虑到存在需要给信号进行中断,Java可以很简单的出来处理这个情况,即使用interuped()办法进行标记,当线程存在处于interruted的状态下,就需要立刻暂停。说的太多没有意义,可以直接看例子public class Main { public static void main(String[] args) throws In
2022-05-20 20:22:01 81
原创 多线程基础学习
在java学习当中,最经常遇到的就是面对多个任务需要同时执行或者在一个较集中的时间内内进行,那么这个时候最好的方法不是使用多个程序进行运行,而是在在这个程序当中使用多线程处理,在日常中有一个词更容易被大家提及,就是进程,进程和线程在java中并不是同一个东西值得注意的是,在这里面一个进程可以拥有一个以上的线程,而线程是不可以同时作用在两个进程上,而在不同的系统当中,对线程的处理不一定都是一样的比如说在windows和linux中使用的是抢占式多任务,自己是无法在程序运行之后知道,而iOS是特殊的伪多任务
2022-05-20 18:12:15 150
原创 泛型类和泛型办法
在java学习当中,对于学习中的比较困难的地方主要集中在泛型,这篇文章主要记录一些我在泛型学习当中得到的概念和后续学习认识被推翻和重新重新创建的过程泛型在学习的时候需要保持对一句话的理解,泛型类型在逻辑上是可以看成多个不同的类型,但在实际上其还是一个相同的基本类型1.泛型类泛型类在类的定义当中使用还算常见,在通过泛型的时候可以完成对一组类的操作对外开放相同接口的目的,例如在接下来几章会学习的规则集set和队列list还有映射map常见的写法也是十分的简单,class+类名称<泛型表
2022-05-05 22:39:22 307
原创 java中==和equals区别
在java中存在equals进行对数据比较是否相同,但在正常情况下还存在“==”也可以表示对数据的对比,在java当中,一般来说是可以这样解释的在基础数据类型的比较的时候,应该使用“=="进行比较其值当存在引用数据类型的时候,可以使用“==”用于对其在内存中存放地址进行比较但在第二种情况下,除非是new出来一个新的对象,他们的比较结果会是true否则比较之后的结果会是false,因为在new了之后会重新开辟一块新的堆内存空间。(开始没有仔细看,在后面的学习中重新开辟空间和规则集中的has
2022-05-05 19:40:31 168
原创 java语言程序设计与数据结构第九章学习笔记
简单通过几个例子就可以大概了解第九章讲的东西,第一个是通过程序进行一个圆的面积的计算import java.util.Scanner;public class testcircle { public static void main(String[] args) { Circle circle1=new Circle(); System.out.println("the area of circle of radius"+circle1.radius+"i
2022-04-19 23:09:51 673
原创 cp.c大体过程
在linux系统中可以对两个文件进行拷贝可以利用cp txt1.c txt2.c进行一个文件上的拷贝,最终可以得到一个名为txt2.c而其中内容和txt1.c相同的文件。在这个过程中,重要的思路主要分为三步,第一步是将 txt1.c中的文件进行一个复制进入一个缓存区,第二步创造一个名为txt2.c的文件,第三步是将缓存区中txt1.c的内容进行一个复制最好可以得到一个得到一个名为txt2.c而其中内容和txt1.c相同的文件在这个过程中,常见的main函数里面不可以在使用其中常用的void 而应该改
2022-04-06 21:01:00 775
原创 快速幂的计算和使用
今天在刷洛谷的时候,正巧发现在普及题库中的p1045非常的有意思,可以从某种意义上相似于大数相加,但经过仔细思考便发现并不是这样简单的情况,这个题目要求的如果考虑的太少的话会导致循环中的次数太多,从而不可以很好的解决,只能花费大量的时间和空间进行一步一步的运算,大概估计便可以得到这个一定会导致结果的失败,那么不如利用其他方法快速幂的运算是在这种情况下比较好的一种情况。正如大家所知道的,在a进行自我的平方运算的时候,自乘的结果可以在自乘n次的情况下得到a的二的n次方,同时也有a的x次方和a的y次方进行
2022-03-21 19:31:55 1139
原创 哈希表学习
数组+链表的哈希表学习。个人理解,简单来说是通过数组,将数组中的每一个位置都被指针指向链表中的某一个存在,需要注意的还是哈希表中可能存在
2022-03-13 18:56:05 695
原创 linux 的终端编辑(学习笔记)
摸鱼的时候学习到的在linux的终端进行编辑,当然并不完美,所以还可以有更多的进步的空间。在终端进行编辑,首先我默认是在没有一个新文件的情况下,即从最开始的地方开始进行,第一步是打开终端,在终端里面进行。然后输入命令 mkdir aaaaaa是你要创建的文件的名字这个时候里面是空的,所以可以直接进入这个文件夹。cd aaa对其中的进行touch hello.c的操作命令,.c代表这是一个c语言的文件.cpp代表是一个c++的文件的情况。之后便会进入vim的编辑,进行保存之
2022-01-24 02:36:39 1064
原创 linux兴趣小组strbuf项目总结
1.void strbuf_init(struct strbuf *sb, size_t alloc); 这个函数要做到对原本的结构体进行初始化操作,同时做到对其中的容量进行初始化的定义,那么可以通过对其中的每一个所含部分进行初始化的操作,重要的是注意其中的那个荣里那个的问题,同时记得对缓冲区的字符串进行定义,即需要的是alloc字符串的长度加上最后的\0的部分,所以可以得到代码void strbuf_init(struct strbuf*sb,size_t alloc){ s
2022-01-19 06:45:50 234
原创 【无标题】
1.长度和宽度sizeof和strlen的区别#include<stdio.h>#include<string.h>int main(){ char s[]="i love linux\0\0\0"; int a=sizeof(s); int b=strlen(s); printf("%d %d",a,b);} 这个结果是16和12.其原因是sizeof比strlen多记录\0的数量。其中字符串原本自带了\0所以sizeof得到的a会比b多4.2.箱子
2022-01-12 15:33:37 68
原创 洛谷部分题解
部分题面对题解p1100:题目描述给出一个小于2^{32}232的正整数。这个数可以用一个3232位的二进制数表示(不足3232位用00补足)。我们称这个二进制数的前1616位为“高位”,后1616位为“低位”。将它的高低位交换,我们可以得到一个新的数。试问这个新的数是多少(用十进制表示)。例如,数13145201314520用二进制表示为0000 0000 0001 0100 0000 1110 1101 100000000000000101000000111011011000(添加了11
2021-12-23 16:16:07 1329
原创 二叉树练习和基本操作(笔记类型)
当链表学习结束,也就可以向更加重要的对内存的分配操作前进。那么这一篇是对二叉树的个人理解和思考。如果有不当的地方欢迎在评论区进行指导首先是介绍二叉树二叉排序树是一种比较有用的折衷方案。 数组的搜索比较方便,可以直接用下标,链表与之相反,删除和插入元素很快,但查找很慢。 二叉排序树就既有链表的好处,也有数组的好处。 在处理大批量的动态的数据是比较有用。我认为可以把它理解成为链表的一种进步,那么重点就是如何对这个进步的建设首先是先对其创建结构代码。这里的代码和链表很像,都是先是定义...
2021-12-09 20:58:22 551
原创 简单单链表的应用和基础性的编写
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。可以理解为一种更加好用的数组,其可以避免或者减少存放位置用完的情况。那么可以用以下代码进行一个简单的单链表的创建#include<stdio.h>#include<stdlib.h>这里使用两个头文件,其中的#include<stdlib.h>这里提供malloc,用于为整个链表的每一个节点分配内存。然后便是最重要的单链表的节点的创建的节点结构体.
2021-12-06 22:47:11 136
原创 2021西安邮电大学linux兴趣小组纳新面试
1.长度和宽度sizeof和strlen的区别#include<stdio.h>#include<string.h>int main(){ char s[]="i love linux\0\0\0"; int a=sizeof(s); int b=strlen(s); printf("%d %d",a,b);} 这个结果是16和12.其原因是sizeof比strlen多记录\0的数量。其中字符串原本自带了\0所以sizeof得到的a会比b多4.2.箱子
2021-12-01 22:26:01 368
原创 2020西安邮电大学linux兴趣小组补录
1.#include <string.h>int main(void){char *str = "linux";str[0] = "L";char a;char *t = &a;strcpy(t, str);printf("%s\n", t);}这个代码有两个问题,第一个其中并没有#include<stdio.h>头文件。第二个问题是他str[0] = "L";这一行会出现一个报错,导致无法正常运行的,那么我可以对这一行进行删除,从而可以得到想要.
2021-11-29 01:52:33 1053
原创 2020西安邮电大学linux兴趣小组面试题
1.运行下面代码段#include<stdio.h>int i;int main(){ i--; if(i>sizeof(i)){ printf(">\n"); } else { printf("<\n"); }}这里使用了反码和补码的知识,-1的补码切换成为反码,后改为源码,便可以大于int类型所使用的4,同时可以得到,如果对i多次累减在一定次数即二的三十二次方里面是可以做到正常的出现,但在累加的情况下,必须要在四次以上才可以。输出为&
2021-11-28 22:42:41 1037
原创 2019西邮linux小组面试题补录
1.第一题是一个输入判断,其中使用到了ASCLL码,和地址有关的东西#include<stdio.h>#include<string.h>struct A{ long a; int b;};int main(){ struct A num ={0x6e694c756f796978}; char ch='0'; for(int i=0;ch;i++){ ch=*((char *)&num+i); printf("%c",ch); } pri
2021-11-27 22:42:06 924
原创 2019 linux兴趣小组纳新试题
1 打印“=”#include<stdio.h>int main(int argc,char *argv[]){ for(unsigned int i=3;i>=0;i--){ putchar('='); }}这道题问的是可以打印出来的“=”的数量,我认为可以打印出来二的三十一次方加上四个“=”,在unsigned int i=3的情况下,可以得到最重要的问题是unsigned的情况,不然可以很容易得到打印出来是四个“=“那么unsigned是什么意思呢,在变量.
2021-11-26 19:31:21 612
原创 c primer plus 第十二章学习笔记(存储类型,链接和内存管理)
1.作用域主要分为块作用域,函数作用域,函数原型作用域,文件作用域。之前大部分都是块作用域,即在一个花括号中所使用的代码区域所使用的变量,但这个变量在下一个函数中并不能得到正常的调用,即可能造成非法的读取和修改(类似于病毒的情况?)但在某些部分当中也有这种块作用域的存在比如说在for函数中for(int i=0;i<len;i++)这里的i在某些编辑器中并不能得到正常的结果,或者说是正常的调用,毕竟这里也有使用到花括号像下面的这个函数中具有的变量就有块作用域double blo..
2021-11-23 18:09:29 429
原创 表示字符串和字符串I/O
1.gets()函数与puts(): 相比于scanf()函数的一次只能读取一个单词,gets()可以在程序中进行一整行的输入,其经常和puts()配对使用,使用时方法如下:#include<stdio.h>#define a 40int main(){char word[a];puts("bearst wu");gets(word,a,word);printf("%s\n",word);puts(word);return 0;}其中的pu...
2021-11-18 13:53:43 230
空空如也
哪里有问题啊,不太懂...
2021-07-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人