自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络中的基本概念

端口号是计算机上的特定程序或服务的数字标识符。标准端口号的范围是从0到65535,其中0到1023为系统端口或者称为知名端口,用于特定服务(如HTTP通常用80端口,HTTPS用。IP地址通常分为IPv4和IPv6两种类型,IPv4使用32位地址空间,而IPv6则是为了应对地址耗尽问题而设计的128位地址空间。另一方面,分用是接收方自底向上通过协议栈处理数据,并逐层移去相应的头部信息,最终将原始数据传递给目标应用程序。客户端发起请求以获取服务或数据,服务器则响应这些请求,并提供相应的服务或数据。

2024-01-14 19:28:31 383 1

原创 IO、存储、硬盘、文件系统概述

文件系统是操作系统用来管理在存储设备上的数据的一种系统。它决定了数据是如何存储和检索的,同时提供了一个文件或数据的组织结构。:数据存储在随机访问存储器(RAM) 中,能够快速访问,但是计算机断电后数据会丢失。:在计算机断电后,数据依然可以保存。例如:硬盘、光盘等。

2024-01-14 12:19:24 390 1

原创 文件操作和IO

借助PrintWriter。:借助Scannner。

2024-01-14 11:54:55 370 1

原创 HashTable 、HashMap、ConcurrentHashMap之间的区别

HashTableHashTable是线程安全的,内部给关键方法直接加上synchronized实现同步(相当于给this加锁) HashTable不允许键或值为null HashTable是历史遗留问题,现在通常使用HashMap 或者 ConcurrentHashMap来代替HashMapHashMap不是线程安全,在单线程环境下使用更佳 允许一个null键和多个null值ConcurrentHashMapConcurrentHashMap 把一个全局的大锁,改进成了每个链表

2024-01-13 22:22:59 374 1

原创 synchronized总结

初始时synchronized处于无锁状态,在有可能出现锁竞争时,就会升级成偏向锁(不是真的加锁,而是做了一个标记)。当锁冲突出现的时候,偏向锁就会升级成自旋锁(轻量级锁),这时就是真正的加锁了,随着锁冲突变得激烈,synchronized会进一步升级成重量级锁。但是,如果锁的粒度太细,在被反复进行加锁解锁时,效率会降低,因此可以选择提高锁的粒度。锁消除是一种编译器优化的手段,编译器会自动针对当前写的加锁代码做出判定,如果编译器觉得这个场景不需要加锁,就会把synchronized给优化掉。

2024-01-13 18:55:12 341 1

原创 线程池解析

核心线程数 (corePoolSize): 线程池初始化时线程的数量,处于空闲状态也不会被回收。最大线程数 (maximumPoolSize): 线程池可容纳的最大线程数量,包括核心线程数和非核心线程数。空闲线程存活时间 (keepAliveTime): 非核心线程空闲时的存活时间,超过这段时间会被回收。空闲线程存活时间单位 (unit): keepAliveTime参数的时间单位。工作任务队列 (workQueue): 存放待处理任务的阻塞队列。

2024-01-10 15:48:36 331

原创 线程安全问题

死锁的成因包括四个必要条件 : 互斥使用(锁的基本特性)、不可抢占(锁的基本特性)、请求保持(代码结构)、循环等待(代码结构)CPU读寄存器的速度远远大于读内存的速度,为了提高效率,编译器会对代码做出优化,把一些要读内存的操作,优化成读寄存器的操作。5.循环等待造成的死锁:对锁进行编号,约定加锁的顺序,可以按从小到大也可以按照从大到小进行加锁。通过加锁可以保证修改操作是原子的,不同线程加锁的对象要相同,从而触发锁竞争。3.添加 volatile 修饰 可以避免 new 操作引发的指令重排序问题。

2024-01-05 16:24:13 358 1

原创 Java线程常见的几种状态

线程为就绪态:线程正在CPU上调度执行 或者 线程处于就绪队列中,等待上处理机(CPU)运行。线程由于调用 sleep() 或者 join() 方法进入固定时间的等待而产生的阻塞。线程对象已经存在了,还没有调用start()方法在内核中创建出线程。线程由 wait() 不固定时间的方式产生的阻塞。线程对象还存在,内核中的线程运行结束销毁了。线程由于锁竞争产生的阻塞。二、线程状态之间切换。

2024-01-03 08:24:53 393 1

原创 Thread类的基本用法

run()和start()都是Thread类中的方法,run()是线程的执行体,它只是普通的方法调用,不会创建新线程。调用start()方法JVM会创建出一个新线程,并在新线程中主动去调用run()方法,start()方法只能调用一次,通过start()方法创建新线程,从而实现并发编程的效果。通过isInterrupted()方法获取Thread对象内部的标志位 interrupt()方法把Thread对象内部的标志位设置为true. 通过设置标志位来中断一个线程。调用start()方法启动线程。

2023-09-14 14:52:04 56 1

原创 进程和线程的区别和联系

创建、销毁、调度一个进程消耗的时间比较多。操作系统内部有管理空闲内存块的数据结构,在申请内存的时候,系统会选择一个大小合适的空闲内存返回给对应的进程。一个进程可能使用一个PCB表示,也可能使用多个PCB表示,每个PCB对应到一个线程上,PCB中的状态、优先级、上下文、记账信息等共同辅助线程去CPU上调度执行。同一个进程的线程和线程之间可能会相互影响,当一个进程内的线程数量过多会出现线程安全问题,当一个线程出现异常,如果不及时处理,可能会使整个进程结束。线程是轻量级进程,创建、销毁、调度线程都比进程更快。

2023-09-11 10:12:22 47

原创 进程调度的基本过程

进程数较多,CPU核心数太少,需要让这些进程轮番在CPU上执行。进程离开CPU之前需要保存现场,把当前CPU中各种寄存器的状态记录到内存中,等下次进程再回到CUP上执行的时候,把保存的这些寄存器的值恢复过去,进程沿着上次执行到的位置继续执行。共同用来完成进程的调度、为进程分配CPU资源,用户是感知不到系统进程的调度的,操作系统的调度器、调度算法不同,进程的调度方式也是不同的。pid(进程标识符):同一时刻标识不同的进程。进程调度是给不同的进程分配CPU资源的过程。记账信息:记录不同进程占有的资源信息。

2023-09-09 12:11:58 53 1

原创 Java数组总结

数组:相同类型元素的集合,在内存中是一块连续的空间。1. 数组中存放的元素类型相同2. 数组的空间是连在一起的3. 每个空间都有自己的编号,起始位置的编号为0。

2023-04-29 17:43:51 153

原创 快速解决git did not exit cleanly (exit code 1) 错误

git did not exit cleanly (exit code 1) 错误。第一步:将远程仓库设置为公开。第二步:重新进行推送。

2023-04-18 18:36:14 1914 1

原创 JDK1.8安装与环境配置 - 简易版

注意:在运行Java程序前,必须先安装好JDK,JDK里面包含了javac和java工具,Java程序最终是在JVM中运行的。

2023-04-13 18:40:35 937 1

原创 【进入CSDN社区的第一篇博客】

计算机语言是人与计算机交互的工具,要想真正的学好计算机,就要提高自己的动手能力。在动手的过程中去感受代码之间的逻辑,才能真正的做到融会贯通。今天在CSDN技术社区开启我的博客之旅,和热爱计算机的同学共同学习、共同进步,努力提高编程能力,提高自己的专业素养,定期分享自己的学习经验。C生万物,C语言是学好编程语言的基础,要不断提高自己的动手能力学好C语言,为之后学习面向对象的编程语言打下基础,掌握C语言、Java语言、C++语言等计算机语言。坚持每天四个小时的敲代码的时间,在实践中提高自己的编程能力。

2023-01-12 12:55:09 84

空空如也

空空如也

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

TA关注的人

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