自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java多线程篇--concurrentHashMap

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java多线程中高频面试点concurrentHashMap,concurrentHashMap在实现上和hashMap有很多相似之处。比如底层的数据结构,扩容的倍数,计算table值等等。和hashMap最大的区别就是如何保证线程安全,下面我们也会重点描述其线程安全的保证。如果对hashMap的内容感兴趣,可以看下公众号中之前的文章

2021-06-09 09:19:53 655 1

原创 Java多线程篇--原子包、阻塞队列和并行流

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java多线程中提供的一些常用框架atomic、阻塞队列、并行流。原子类在某些场景下能够提高性能,避免使用锁。阻塞队列完成的是生产者消费者模型,这个在很多场景会使用到,包括线程池里面的一个重要参数就是阻塞队列。并行流结合lambda表达式能够改变我们的平时代码风格,但要注意的是需要关注一下线程安全问题。如果对java多线程感兴趣的同学

2021-06-09 09:14:14 237 1

原创 Java多线程篇--threadlocal和线程池

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java多线程中提供的一些常用框架threadlocal、线程池。线程池是面试的一大热点问题,非常有必要掌握线程池的原理和相关源码;Threadlocal在某些特定的场合下作用非常大,掌握其核心内容和使用方法也非常有必要。如果对java多线程感兴趣的同学可以看下公众号里多线程系列的文章,也许会对你有些帮助。ThreadLocal有

2021-06-09 09:06:43 1918

原创 Java多线程篇--线程的等待通知

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java多线程中面试的可能会出现的内容-等待通知。该部分内容是多线程的核心内容,当然也是阻塞队列实现的底层原理。在面试中碰到的概率不大,实际开发中使用的不多(更多的直接使用阻塞队列),同时本文还会描述几个线程相关的内容,这些内容在面试中可能会出现。如果对java多线程感兴趣的同学可以看下公众号里多线程系列的文章,也许会对你有些帮助。

2021-06-09 08:59:01 292

原创 Java多线程篇--AQS

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java多线程中面试的核心内容可重入锁,这个无论在开发还是面试中都是核心的内容,所以务必要掌握其原理,如果有时间的话,看下这部分源码的内容也是很有帮助的,ReentrantLock的核心是AQS(abstract queue synchronizer)的内容,当然AQS不仅仅是锁的实现,后面的信号量的实现也是基于此。本文会重点解答面试

2021-06-09 08:54:28 65

原创 Java多线程篇--并发关键字synchronized和volatile

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java多线程中面试的锁机制。这个是面试中的重点内容,也是平时开发过程中经常碰到的问题,所以我们一定要重点了解锁的内容。锁的内容主要有关键字volatile,synchronized,这两个要掌握其实现的原理,下面的内容会重点描述这两个关键字的实现原理以及面试中可能出现的问题。如果对这些感兴趣的话,可以看下公众号中源码的内容。.

2021-06-09 08:47:44 125 1

原创 Java多线程篇--基本概念

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java多线程中面试的基本概念。这个在面试中一般不会直接问,但是如果对一些知识点敞开描述的时候,可以深入聊下。如果对java多线程感兴趣的同学可以看下公众号里多线程系列的文章,也许会对你有些帮助。说下并发和并行的区别?并发是指在一段时间内有多个任务需要执行,你可以使用单个cpu串行:在cpu在执行多个任务的时候,每个时间.

2021-06-09 08:42:59 177

原创 java面试-多线程常见面试题

多线程是java的一名必修课,熟悉并掌握多线程在面试中很重要。一般多线程的面试集中在底层实现,基本概念,线程池等问题。如果对多线程的概念有兴趣可以看下公众号中多线程系列的文章。Volatile的作用是什么?底层是怎么实现的?缓存的一致性协议是什么?有没有了解过内存屏障? Synchronized 的原理有了解?和reentryLock的区别是什么?锁升级是指什么? 并发和并行的概念有了解?Java实现并发的方式有几种? 线程和进程的概念?守护线程是干什么的?常见的守护线程有哪些? Java怎么创

2021-06-09 08:35:05 104 1

原创 Java基础篇--集合(map)

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java面试中几乎必问的集合内容,java的集合是jdk里面重要的内容,也是我们平时开发过程中最常用到的,所以无论是否为了准备面试,我们都要掌握好集合相关的知识。既然是重点,那就意味着集合类在java面试中的题目会非常多,本文中点描述map,尤其会解析hashmap的基本操作和相关的源码解析,对于可能涉及到的多线程concurrent

2021-06-01 09:27:30 95 2

原创 Java基础篇--集合(collection)

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java面试中几乎必问的集合内容,java的集合是jdk里面重要的内容,也是我们平时开发过程中最常用到的,所以无论是否为了准备面试,我们都要掌握好集合相关的知识。既然是重点,那就意味着集合类在java面试中的题目会非常多,尤其是hashmap,由于其设计精美,细节优化突出,常常是面试中集合的首选,所以我会把hashmap单独使用一篇文

2021-06-01 09:20:32 196 1

原创 Java基础篇--IO

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java面试中出现频率较高的IO。看过jdk源码的同学可能知道,java的IO模型分为两种,传统的IO和NIO。传统的IO就是我们平时常用的BIO(Blocking IO),它的包名是java.io;而NIO(NoBlocking IO)的包名是java.nio。网络io其实是面试中常见的问题,掌握这个对我们的面试会有很大的帮助。下面

2021-06-01 09:16:34 122

原创 Java基础篇--概念理解(泛型、注解)

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java面试中可能会出现的泛型和注解。说是可能会出现,但基本还是不会面试到这里啦。但是,如果你在实战中,泛型和注解在代码优化上能够起到很好的作用。在无侵入开发中,注解有着很重要的作用,所以理解好注解和泛型对我们实战过程还是很有帮助的。下面我们通过几个简单的例子来说明一下。泛型的工作原理?有了解过类型擦除么?在说到泛型的工作原理

2021-06-01 09:10:17 188 2

原创 Java基础篇--概念理解(重写、接口)

在之前的文章中,已经发布了常见的面试题,这里我花了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java面试中的一些基本概念和常用的关键字,涉及到重载和重写、覆盖;java的抽象类和接口;static、final、public等关键字。其中的接口抽象类的概念需要重点掌握,java 的权限关键字也是代码中可以去关注的点,可是由于我们平时开发的代码安全性没有那么高,所以一般就是public解决一切问题,但掌握了对我们本身的代码质量还

2021-06-01 09:02:03 292 1

原创 Java基础篇--异常机制

在之前的文章中,已经发布了常见的面试题,这里我了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java的异常机制,这个在实际面试中,问到的概率不算太大,但是在项目中,如何优雅的使用异常机制却是一个很大的学问。下面先看一个常见的面试题型。publicstaticvoidmain(String[]args){ System.out.println(test()); } ...

2021-06-01 08:58:45 118

原创 Java 基础篇--字符串

在之前的文章中,已经发布了常见的面试题,这里我了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述字符串的知识点,下面先看下面一段代码:publicstaticvoidmain(String[]args){ Strings1=newString("abc"); Strings2="abc"; Strings3=newString...

2021-06-01 08:52:35 63

原创 Java基础面试 --序列化,反射,拷贝

在之前的文章中,已经发布了常见的面试题,这里我了点时间整理了一下对应的解答,由于个人能力有限,不一定完全到位,如果有解答的不合理的地方还请指点,在此谢过。本文主要描述的是java基础内容序列化,反射和拷贝。这些在面试中会经常问到,尤其是反射,功能强大到基本框架都利用了该知识点。在实际项目开发中,序列化,反射,拷贝都是常用的知识点,所以重点掌握这些内容是很有必要的。java创建一个类的方法有几种?这是字节跳动的一道面试题,原来的题目意思是除了new一个对象,java还可以通过哪些方法来构建一个对象

2021-06-01 08:46:24 192 1

原创 高频java基础面试题

一般java基础考察的是jdk源码(集合,IO,字符串,关键字),java的一些设计理念。如果对jdk源码感兴趣可以看下公众号中的jdk源码系列的文章。下面是总结的常见面试题,希望对你有帮助。1. Java创建一个类的方法有几种?2. Java中== 和equals的区别是什么?3. 序列化的作用是什么?常见的序列化方法是什么?Java自带的序列化是怎么实现的?4. 解释下重载和重写的区别?5. 有了解过java的异常机制么?请结合项目描述一下你是怎么处理异常的?是否会自定义异常?6

2021-06-01 08:38:30 102

原创 浅析java内存模型

在java语言中,定义java内存模型(JMM)使得程序员更好的理解java并发,同时也屏蔽了java语言在不同处理器上的内存读取的不一致性。为了要达到这个要求,所有的芯片设计商需要满足相关的协议,用来保证数据的一致性、可靠性。Java语言的数据在jvm中分为堆、栈、计数器、本地方法栈、代码区。本次要讨论的JMM主要定义的是堆中的数据。而像栈、计数器、本地方法栈,代码区,这些区域的数据在单线程和多线程没有什么差别。只有在堆中的数据才有可能会受到多线程的影响,可能会产生数据不一致性。并发编程中,有两个基本

2021-04-17 16:04:03 85

原创 Volatile底层实现原理

在java中,关键字volatile那是必须要掌握的,这在多线程并发中大量被使用。从之前的jdk源码也可以知道,volatile和CAS构成了java语言高并发的基石。我们一般会把volatile称为轻量级的锁,有时我们在使用volatile的时候能够达到更高的并发。那么关键字volatile的作用是什么?我们在实际中如果需要使用volatile的话,无非是保证有序性和可见性。有序性和可见性在之前的 并发的特性中有介绍。那么volatile是怎么实现这两个特性的呢。可见性:在了解可见性性之前..

2021-04-12 09:44:01 346

原创 java并发三大特性--有序性、可见性、原子性

在java并发编程中,我们一般会说需要满足以下三个基本条件才能构成java并发的基础,这三个特性分别是:有序性、可见性、原子性。那么这三个特性到底是一个怎么样的概念呢,下面我们将通过一些例子来详细说明一下这几个概念。有序性:有序性是指在java并发中,如果执行编码的两条指令按照代码的先后顺序执行。设想一下,如果代码的执行顺序和我们看到的代码顺序不一样,那很可能会导致结果错乱。可为什么会导致代码执行和我们编写看到的不一样呢?这是因为编译器,处理器为了提升执行效率会对代码编译过后的执行指令进行重新排序(指令

2021-04-11 10:20:51 1019

原创 进程or线程

进程or线程1.什么是进程,线程及相关概念?在操作系统中,一开始就会介绍进程,线程,这些概念,但对于刚接触的来说还是显得有些难以理。之前在网上看到一篇博客在描述操作系统中的概念做了个形象的比喻,很贴切。这里引用拓展一下:计算机处理计算任务的主要硬件是CPU,CPU就好像一个工厂。进程就是工厂的车间,如果工厂的供电有限,一次只能给一个车间开工干活,这个车间在干活的时候,其他车间就无法占用CPU,他们只能等待。这就是单核CPU只能每次只能处理一个进程的计算。至于多核的话,这个就好比他们又新建了一

2021-04-11 10:12:10 66

原创 c++修改文件某行内容

/************************************************************************//* char*tostr 字符串转化str类型输入:char * 字符串地址 无输出返回值: str类型的字符串*//*********************************************************

2017-03-28 15:59:47 31099 3

转载 多进程通信

最近在学习linux环境高级编程,多进程编程算是编程中的最重要的一个部分了,本文让我学习和明白了很多,所以转载过来。让更多想多线程编程的人学习。只有顶到首页才能让更多的人学习。文章摘要:    多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix系统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。本文我们将介绍在Linux下编写多进程和多

2016-03-02 16:30:03 318

原创 c++重写string类

这是第一次写的string类,可能会有些没有考虑到的问题,还请大神指导。。。。//重写string类#include #include using namespace std;class my_string///* {public: //三种构造函数 my_string(){}; my_string(int n,const char a) { len=n+1; da

2016-03-02 16:28:19 878

转载 操作系统常见的面试题

1.  什么是进程(Process)和线程(Thread)?有何区别? 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动, 进程是系统进行资源分配和调度的一个独立单位。 线程是进程的一个实体, 是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 线程自己基本上不拥有系统资源, 只拥有一点在运行中必不可少的资源 (如程序计数器, 一组寄存器和栈), 但是它可与同

2015-12-31 15:09:52 315

原创 c++常见基础知识面试题

1、关键字static的作用是什么?//主要的核心是因为定义static时,在定义的变量就不在堆栈区了,在静态区。1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函

2015-12-27 16:18:32 375

原创 C 专家编程的一些小知识点

因为看到别人的推荐,所以看完了C专家编程,感觉还是写的比较好,有些知识点是可以积累的,于是写下了这篇笔记。。。。。1.数组为什么是从0开始的,这个主要是因为数组的下标代表的是偏移量,这个对编译器来说是比较重要的。2.看下面一段代码:#include using namespace std; int main() { char *cp; const char *ccp;

2015-12-01 16:52:13 435

转载 Haaris角点检测

项目的一个问题:图像矩形检测,当然,一开始可能会想到霍夫变换,还有就是这个haaris角点检测。 haaris角点检测在一个或者是两个相机进行标定的时候常常用到,Opencv和matlab中都有现成的命令和程序可循。为了解角点检测的原理,自己动手查看资料并写matlab程序实现,相信这是记忆最快最深刻的方法。       角点的位置就是图像中在x和y方向变化都很大的那个交点处。为了

2015-11-30 14:53:58 2948

转载 UNIX网络编程——Posix共享内存区和System V共享内存区

Posix提供了两种在无亲缘关系进程间共享内存区的方法:(1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件。(2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中的一个路径名),然后调用mmap将返回的描述符映射到当前进程的地址空间。两种方法多需要调用mmap,差别在于作为mm

2015-11-29 17:23:56 1215

转载 信号量、互斥锁,读写锁和条件变量的区别

信号量强调的是线程(或进程)间的同步:“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在那里)。当信号量为单值信号量是,也可以完成一个资源的互斥访问。有名信号量:可以用于不同进程间或多线程间的互斥与同步  创建打开有名信号量  sem_t *sem_open(const char *name

2015-11-29 16:24:36 543

转载 System V信号量

System V 信号量在内核中维护,其中包括二值信号量 、计数信号量、计数信号量集。二值信号量 : 其值只有0、1 两种选择,0表示资源被锁,1表示资源可用;计数信号量:其值在0 和某个限定值之间,不限定资源数只在0 1 之间;计数信号量集 :多个信号量的集合组成信号量集创建一个信号量或访问一个已经存在的信号量集。int semget(key_t key, int nsems

2015-11-29 16:05:36 307

原创 UNIX网络编程——Posix信号量

信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。Posix信号量分为有名信号量和无名信号量(也叫基于内存的信号量)。

2015-11-27 16:21:33 250

原创 UNIX网络编程——记录上锁

记录锁是读写锁的一种扩展类型,可用于亲缘关系或无亲缘关系的进程之间共享某个文件的读与写。被锁住的文件通过文件描述符进行访问,执行上锁的操作函数是fcntl,这种类型的锁通常在内核中维护。  记录锁的功能是:一个进程正在读或修改文件的某个部分时,可以阻止其他进程修改同一文件区,即其锁定的是文件的一个区域或整个文件。记录锁有两种类型:共享读锁,独占写锁。基本规则是:多个进程在一个给定的字节上可

2015-11-27 15:12:04 314

原创 UNIX网络编程——读写锁

读写锁比起mutex具有更高的适用性,具有更高的并行性,可以有多个线程同时占用读模式的读写锁,但是只能有一个线程占用写模式的读写锁,读写锁的三种状态:1.当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞2.当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行加锁的线程将会被阻塞3.当读写锁在读模式的锁状态时,如

2015-11-27 09:41:11 303

转载 如何配置gethub(linux)

1.First : 安装:ubuntu 下,终端输入命令:sudo apt-get install git-core git-gui git-docNext : 设置SSH Key检查是否已经有SSH Key。$cd ~/.ssh如果说没有这个目录,就直接看第三步备份生成一个新的SSH。$ssh-keygen -t rsa

2015-11-25 15:20:35 957

原创 UNIX编程——互斥锁和条件变量

在线程和进程的实现中,完成数据共享需要同步的,互斥锁和条件变量是很重要的组成部分。1.互斥锁互斥锁是用来保护临界区资源,实际上保护的是临界区中被操纵的数据,互斥锁通常用于保护由多个线程或多进程分享的共享数据。一般是一些可供线程间使用的全局变量,来达到线程同步的目的,即保证任何时刻只有一个线程或进程在执行其中的代码。

2015-11-24 16:41:48 601

转载 STL的底层实现和优缺点

1.STL的底层实现:STL底层数据结构实现C++ STL 的实现:1.vector      底层数据结构为数组 ,支持快速随机访问2.list            底层数据结构为双向链表,支持快速增删3.deque       底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(

2015-11-24 15:40:03 2098

原创 UNIX网络编程——System V 消息队列

消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识。具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。System V 消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除。对于系统中没个消

2015-11-24 10:20:14 511

原创 UNIX网络编程——Posix 消息队列

消息队列可以认为是一个消息链表,某个进程往一个消息队列中写入消息之前,不需要另外某个进程在该队列上等待消息的达到,这一点与管道和FIFO相反。消息队列是随着内核的持续性的,而管道只是随着进程的持续性。这意味着管道在进程结束时,留在管道内的数据将会被丢弃。Posix消息队列与System V消息队列的区别如下:1. 对Posix消息队列的读总是返回最高优先级的最早消息,对Syst

2015-11-23 09:28:59 272

原创 UNIX编程——管道和FIFO

进程间的通信有三种形式:管道/FIFO、Posix(Portable Operating System Interface,可移植操作系统接口)消息队列、System V 消息队列,先来介绍第一种通信方式,也是最开始的一种通信方式:管道/FIFO1.对于管道而言,它的局限在于没有名字,从而只能有秦缘关系的进程使用,但是后面有发展出FIFO(这种又被称为有名管道),一般使用的是read和writ

2015-11-21 20:43:06 991

空空如也

空空如也

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

TA关注的人

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