自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 后台开发核心技术与应用实践看书笔记(三):常用STL的使用

copy(p,n,size_type_Off=0)这句表明从string类型对象中至多复制n个字符到字符指针p指向的空间中,并且默认从首字符开始,也可以指定开始位置(从0开始计数)。如果格式化后的字符串长度不小于size,则只将其中的(size-1)个字符全部复制到str中,并且加上结束符’\0’但是vector的拷贝构造函数只分配拷贝的元素需要的内容,所以这个临时vector没有多余的容量。然后这个语句结尾处,临时vector被销毁,以释放以前ivec使用的内存,收缩到合适的大小。功能是:将可变个参数…

2023-10-09 21:51:22 298

原创 后台开发核心技术与应用实践看书笔记(二):面向对象的C++

基类成员函数声明为虚函数后(派生类的同名函数自动成为虚函数,但最好还是加上virtual,如果派生类没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数),可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。可能出现有些基类的成员,派生类用不到,造成数据冗余,多次派生后,就存在大量无用的数据,不仅浪费空间,而且在对象的建立,赋值,复制和参数的传递中,花费许多无谓的空间,降低效率。系统在进行动态关联时的时间开销是很少的,因此,多态是高效的。函数代码是存储在对象空间之外的。

2023-10-07 21:03:31 413

原创 Effective C++看书笔记(9):杂项讨论

c++98列入的C++标准程序库主要成分。TR1有14个新组件。

2023-10-06 11:51:54 196

原创 Effective C++看书笔记(6):继承与面向对象设计

即不要覆盖父类的普通函数。讨论的继承一个带有缺省参数值的virtual函数virtual函数是动态绑定,缺省参数值是静态绑定。

2023-10-06 11:50:51 254

原创 Effective C++看书笔记(5):实现

只要定义了一个变量而且其类型带有一个构造函数或析构函数。那么程序到达这里时就要承受构造成本,离开时就要承受析构成本。即使这个变量并未最终被使用,所以要尽量避免这种情况。方法就是尽可能延后定义变量,尽量定义变量时使用有参构造函数直接一次性弄好,避免无意义的默认构造行为。例子if(...)这样如果有异常就没用到变量改进if(...)这样就是无意义的默认构造行为,后面再赋值,效果仍不好。等待真正使用才定义比较好if(...)循环怎么办变量定义在循环外,性能更好,但是变量作用域更大。

2023-10-06 11:47:35 142

原创 Effective C++看书笔记(4):设计与声明

比如:以指针指向一个对象,内含真正数据那种类型,即pimpl,pointer to implementation。(函数参数以实参的复制副本为初值,调用端返回的也是函数返回值的一个复件)。const是必要的,因为传的是引用,可以真正更改了,如果不需要更改就需要加上const。阻止误用包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。比如计算函数里面,就必须返回结果的副本,否则返回引用,函数一结束,副本就没了。一般情况,内置类型和STL的迭代器和函数对象都pass by value。

2023-10-06 11:44:31 117

原创 Effective C++看书笔记(3):资源管理

auto_ptr和shared_ptr(一般都用这个),两者都在其析构函数内做delete而不是delete[]动作,所以不要在动态分配得到的array身上使用auto_ptr或tr1::shared_ptr。为了预防这个问题,auto_otr有一个不寻常的性质:若通过copy构造函数或copy assignment操作符复制它们,它们会变成null,而复制所得的指针将取得资源的唯一拥有权。如果资源不是在堆上,那么auto_ptr和tr1::shared_ptr就不适合了。两个都必须严格对应原来的形式。

2023-10-06 11:41:02 106

原创 后台开发核心技术与应用实践看书笔记(一):C++编程常用技术

define用来将一个标识符(宏名)定义为一个字符串(替换文本)。在简单宏定义的使用中,当替换文本所表示的字符串是一个表达式时,需要加上括号,否则容易引起误解和误用。比如#define N29int main()int a=N*N;return 0;因为宏展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符串,并不会有任何的计算发生,在展开时是在宏N出现的地方只是简单地使用串2+9来代替N,并不会增添任何的符号。所以该程序展开后的结果是a=2+9*2+9,计算后的结果为29。

2023-10-06 11:35:25 184

原创 Effective C++看书笔记(2):构造/析构/赋值运算

问题:Transaction构造函数最后一行调用了logTransaction,这个时候调用的是Transaction的版本,而不是ButTransaction的版本。基类指针指向子类对象,如果基类的析构函数是non-virtual,那么会导致析构时只析构了基类的部分,但是没有析构掉子类的部分。当对象调用某一virtual函数,实际被调用的函数取决于该对象vptr所指的那个vtbl——编译器在其中寻找适当的函数指针。解决办法:把不想生成的函数,自己来定义,声明为private,代表不使用。

2023-09-24 12:03:44 110

原创 Effective C++看书笔记(1):让自己习惯C++

对C内置类型(比如int这种)而言pass-by-value一般比传递引用更高效,但是在Object Oriented C++中由于用户自定义构造函数和析构函数的存在,传递const引用往往更好,运用Template C++同样如此,因为你都不知道对象类型是什么。所以声明迭代器为const,也就是声明了一个常量指针,T* const,表名这个迭代器不能改变,但是它指向的东西的值可以改变。然而在STL中,迭代器和函数对象都是在C指针上面塑造出来的,所以STL的迭代器和函数对象,C的传递值守则更好。

2023-09-23 12:16:08 184

原创 并发编程之线程池

文章目录线程使用上的问题线程的复用线程池使用小Demo执行任务的两种方式ThreadPoolExecutor猜想参数猜想总结图源码验证如何关闭线程池线程数量(千古难题)线程使用上的问题线程的频繁创建好销毁线程的数量过多,会造成CPU资源的开销。上下文切换 (消耗CPU资源)。线程的复用连接池、对象池、内存池、线程池 。池化技术的核心: 复用线程池提前创建一系列的线程,保存在这个线程池中。有任务要执行的时候,从线程池中取出线程来执行。没有任务的时候,线程池放回去。Excut

2021-07-24 17:08:34 137

原创 ThreadLocal(深入源码分析)

文章目录案例使用场景强,软,弱,虚引用(看源码会用到)内部结构设计的好处主要方法源码(一定要把内部结构看懂再看)set方法get方法remove方法内存泄漏ThreadLocal作用是让每一个线程都独有一份空间来存储自己需要的变量,这份变量对其它线程不可见!因为之前线程都是共享进程的资源嘛,如果要线程独有自己的资源就需要ThreadLocal,并且这个变量生命周期和线程生命周期一样。案例public class MyDemo { private static ThreadLocal<

2021-07-24 13:29:32 133

原创 J.U.C的并发工具

文章目录CountDownLatch让一个线程阻塞用法让多个线程阻塞用法实际应用(检测数据库,缓存两个服务的状态)思考底层原理Semaphore经典案例CyclicBarrierExchangerCountDownLatch就是一个计数器await阻塞线程countDown计数器减1,计数器为0时唤醒await线程让一个线程阻塞用法public class CountDownExample { static CountDownLatch countDownLatch=new Cou

2021-07-24 07:19:04 268

原创 并发编程之Lock锁(下)(源码分析)

文章目录Lock相关UML图公平锁和非公平锁抢占失败,加入队列并进行自旋等待unlockLock上文已经通过文字和画图大致描述了Lock的整个流程,本文就来看源码相关UML图解析,上图自然懂组合了一个Sync类的对象,在构造方法里面new的ReentrantLock默认是非公平锁如果要new公平锁,可以通过传入参数true实现Sync继承AQS,Sync其实就是干实事的,ReentrantLock的方法都是通过调用它实现锁的机制具体的非公平锁和公平锁继承抽象类Sync公平

2021-07-19 15:51:21 168

原创 并发编程之线程间的通信

文章目录经典消费者,生产者案例(不同于操作系统的生消案例)Wait和Notify的流程JoinCondition案例Condition设计猜想经典消费者,生产者案例(不同于操作系统的生消案例)public class Producer implements Runnable { private Queue<String> bags; private int maxSize; public Producer(Queue<String> bags, int

2021-07-19 13:08:25 117

原创 并发编程之Lock锁(上)

文章目录LockReentrantLockReentrantLock的设计思想总结流程图Lock它是一个接口,提供了以下的方法tryLock是返回一个布尔值,如果未抢占到锁不会阻塞,直接跳过lock是抢占锁,如果未抢到那么就阻塞,等待唤醒lockInterruptibly是可中断锁具体实现有以下用的最多的就是ReentrantLock了ReentrantLock案例public class LockDemo { static Lock lock=new ReentrantLo

2021-07-16 21:12:17 165

原创 Java内存模型

文章目录什么是Java内存模型(JMM)?如何屏蔽各种硬件和操作系统的差异的呢?总结什么是Java内存模型(JMM)?如图,在不同的CPU架构中,为了避免指令重排序、或者缓存一致性问题,都提供了不同的内存屏障指令。在不同的操作系统中,封装的内存屏障的实现也不相同。Java线程,如何能够在不同的硬件、不同操作系统下,仍然能够保证线程安全性呢?这就要靠JMM(Java 内存模型)Java内存模型(Java Memory Model ,JMM)就是一种屏蔽了各种硬件和操作系统的访问差异的,保证了J

2021-07-16 17:30:51 106

原创 并发编程之可见性(上)

文章目录可见性问题Demo为什么会产生可见性问题?CPU层面的缓存缓存一致性问题缓存锁和总线锁缓存一致性协议可见性问题Demopublic class VolatileDemo { public static boolean stop=false;//方法1是给这个变量加上Volatile关键字 public static void main(String[] args) throws InterruptedException { Thread t1=new Thread((

2021-07-16 10:36:42 81

原创 并发编程之可见性(下)

文章目录volatile原理指令重排序Happens-Before规则内存屏障CPU优化之路的总结volatile原理由上面的Demo效果,我们可以知道volatile解决了可见性问题,再加上可见性的原理分析和解决方法的分析,也就可以推出下图volatile关键字其实就是在汇编层面加了一个lock指令,然后lock指令最后是采用缓存锁还是总线锁来解决缓存一致性问题是由CPU自己决定的,我们不用管。指令重排序除了缓存一致性问题还有最后一个就是指令重排序的问题。即CPU,JVM层面优化指令的执行顺序

2021-07-16 10:35:16 83

原创 并发编程之同步锁(下)

文章目录锁的具体实现偏向锁demo重量级锁DemoCAS(有点类似于数据库通过version来实现乐观锁的感觉)CAS底层实现ABA问题锁的具体实现先上图再上代码验证偏向锁demopublic class LockDemo { Object o=new Object(); public static void main(String[] args) { LockDemo demo=new LockDemo(); //o这个对象,在内存中是如何存储和布局的。

2021-07-04 20:32:30 89

原创 并发编程之同步锁(上)

文章目录并发编程安全三大问题Synchronized的基本应用Synchronized的原理对象头通过ClassLayout打印对象头对齐填充锁的状态并发编程安全三大问题原子性(Synchronized, AtomicXXX、Lock可以解决)涉及到共享变量访问的操作,若该操作从执行线程以外的任意线程来看是不可分割的,那么该操作就是原子操作,该操作具有原子性。即,其它线程不会“看到”该操作执行了部分的中间结果。老掉牙的代码public class Demo { int i = 0;

2021-07-04 19:28:08 123

原创 并发编程入门篇(下)

文章目录java线程的状态wait和sleep的区别join和yield查看线程状态方式线程的停止interrupt方法处于阻塞状态下的线程中断java线程的状态线程的状态包括 新建状态,运行状态,阻塞等待状态和消亡状态。其中阻塞等待状态又分为BLOCKED, WAITING和TIMED_WAITING状态。源码:注意看我的注释public enum State { NEW,//这一个已经创建的线程,但是还没有调用start方法启动的线程所处的状态。

2021-07-04 15:55:31 81

原创 并发编程入门篇(上)

文章目录什么是并发?QPS?TPS?怎样才能实现高并发?CPU浪费现象和上下文切换线程和进程为什么要引入线程Java实现线程的方式为什么是调用start方法而不是run方法?多线程什么是并发?QPS?TPS?并发数即当前系统能够同时承载的并发数(即请求处理数 )QPS(Queries Per Second)是每秒查询率(一台服务器每秒能够响应的查询次数),即最大吞吐能力。TPS(TPS Transactions Per Second)是事务数/秒,这里的事务是指客户端向服务器发送请求然后服务器做出

2021-07-04 09:40:50 200

原创 Spring必会点

文章目录讲讲Spring吧IOCSpring的优点AOPAOP实现的两种方式JDK动态代理实现AOPCGLIB动态代理实现AOPIOC容器的初始化过程BeanFactory和FactoryBeanBeanFactory和ApplicationContext有什么区别?Spring中Bean的作用域有哪几种?Spring事务SpringMVC的执行流程SpringBoot讲讲Spring吧Spring是一个轻量级的IOC和AOP容器框架。是为Java应用程序提供基础服务的一套框架,目的是用于简化企业应用程

2021-06-26 10:48:51 476

原创 JVM学习一

文章目录学习JVM目的JVM内存的分区对象创建过程中的内存分配内存的分配保证线程安全问题怎么找到要访问的对象的?JVM内存分配和垃圾回收JVM堆内存的分配:JVM非堆内存的分配堆内存上对象的分配与回收如何判定一个对象是否应该被回收?对象的引用学习JVM目的如何对JVM进行内存分配,应该对当前服务采用哪种垃圾回收器的问题。当我们遇到OOM内存溢出的故障时,也必须去分析研究其原因,所以还需要使用到各个内存调优分析手段。JVM内存的分区重点掌握堆内存,栈内存以及方法区域的定义和作用方法区:方法区是一个

2021-06-26 09:50:01 108

原创 Java并发三

文章目录线程池使用线程池有什么好处线程池的7个参数线程池怎么排队?比较常见的线程池类型阻塞队列ArrayBlockingQueueLinkedBlockingQueueSynchronousQueueCountDownLatchCyclicBarrierThreadLocalAtomic杂七杂八多线程知识点线程池即存放线程的池子。Client调用ThreadPoolExecutor.submit(Runnable task)提交任务,然后线程池用里面的线程来处理这个任务。线程池内部维护的工作者线程的

2021-06-26 09:19:40 92

原创 Java并发二

文章目录原子性可见性有序性总结三大性synchronized公平调度方式非公平调度方式两者优缺点volatileReentrantLock和synchronized原子性定义:对于涉及到共享变量访问的操作,若该操作从执行线程以外的任意线程来看是不可分割的,那么该操作就是原子操作,该操作具有原子性。即,其它线程不会“看到”该操作执行了部分的中间结果。举例:银行转账流程中,A账户减少了100元,那么B账户就会多100元,这两个动作是一个原子操作。我们不会看到A减少了100元,但是B余额保持不变的中间结果。

2021-06-19 18:49:43 84

原创 Java并发一

文章目录并发编程必须会的知识点进程和线程的区别进程之间的通信方式(操作系统层面)单线程和多线程的关系线程的状态有哪几种?并发编程中常用的API线程会遇到哪些故障?死锁线程锁死信号丢失锁死嵌套监视器锁死活锁线程饥饿并发编程必须会的知识点单线程和多线程,进程与线程的区别线程活性故障及其解决方法线程调度方式可见性,原子性以及有序性synchronized,volatile,Atomic等关键字线程池及阻塞队列java.util.concurrent(简称JUC )包,此包是并发编程中常用的工具

2021-06-19 18:20:51 211

原创 Java集合一

文章目录Java三大集合接口Java中常见的集合HashMap和Hashtable的区别有哪些?HashMap是线程不安全的是吧?你可以举一个例子吗?经典错误,标准零分正确答案Java集合快速失败(fast-fail)机制快速失败机制底层是怎么实现的呢?HashMap底层实现结构HashMap存储扩容机制解决Hash冲突的办法哪些类适合作为HashMap的键?ConcurrentHashMap和Hashtable的区别?ConcurrentHashMap的具体实现方式(分段锁):集合的类图Java三大集合

2021-06-19 16:03:11 88

原创 Java基础三

文章目录Java中的Exception和Error有什么区别?JIT编译器Java中的值传递和引用传递可以解释下吗?剩余java基础面试题Java中的Exception和Error有什么区别?Exception是程序正常运行中预料到可能会出现的错误,并且应该被捕获并进行相应的处理,是一种异常现象Error是正常情况下不可能发生的错误,Error会导致JVM处于一种不可恢复的状态,不需要捕获处理,比如说OutOfMemoryErrorException又分为了运行时异常和编译时异常。编译时异

2021-06-19 14:56:48 99

原创 Java基础二

文章目录抽象类和接口有什么区别抽象类和接口应该如何选择?分别在什么情况下使用呢?默认方法(default)如果两个接口中存在同样的默认方法,实现类继承的是哪一个呢?JDK8中为什么会出现默认方法呢?Java中的8种基本数据类型及其取值范围java元注解注解处理器反射机制抽象类和接口有什么区别抽象类中可以没有抽象方法,也可以抽象方法和非抽象方法共存接口中的方法在JDK8之前只能是抽象的,JDK8版本开始提供了接口中方法的default实现抽象类和类一样是单继承的;接口可以实现多个父接口抽象类中可以

2021-06-19 14:25:33 122

转载 Linux常用命令

文章目录简单命令关机和重启lsmkdircdrmtouchvicatcpmvfind稍微复杂命令grepawk命令top和ps命令:探测进程sedsort命令tail和head命令简单命令简单命令完全来自大佬关机和重启关机shutdown -h now 立刻关机shutdown -h 5 5分钟后关机poweroff 立刻关机重启shutdown -r now 立刻重启shutdown -r 5 5分钟后

2021-06-19 10:56:29 98

原创 Java基础一

文章目录面向对象可以解释下吗?都有哪些特性?封装继承多态JDK,JRE和JVM的区别与联系有哪些?Java的跨平台性是如何实现的呢?java语言是编译型还是解释型语言?面向对象可以解释下吗?都有哪些特性?面向对象是一种思想,可以将复杂问题简单化,让我们从执行者变为了指挥者(因为我们只需要去调用类的方法了)。面向对象的三大特性为:封装,继承与多态。封装将抽象的一类事物封装成一个类,减少耦合(防止直接在业务代码中修改代码,应该尽量在方法的代码修改代码)和代码重复(外部只需要调用方法,而不用在业务代码中写

2021-06-19 10:07:12 307

原创 Mybatis的高级应用

文章目录什么是Mybatis?Mybatis的使用配置阶段Mybatis使用实操阶段Mybatis特点详细介绍MyBatis核心配置文件详细介绍Mybatis映射文件Mybatis最佳实践动态sql批量插入批量删除批量更新BatchExecutor关联查询嵌套查询延迟加载分页操作逻辑分页物理分页什么是Mybatis?MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过

2021-05-02 19:09:26 315

原创 Mybatis的前世今生

文章目录JDBCJDBC优化1JDBC优化2JDBC优化3Apache DBUtils(效率很高)Spring JDBC(效率很高)Hibernate什么是ORMHebernate的使用Hibernate优缺点JDBC说到java操作数据库jdbc一定是饶不开的。Mybatis其实也就是对JDBC进行了封装// 注册 JDBC 驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 打开连接 conn = DriverManager.getConnec

2021-05-02 10:01:00 179

原创 面试高频——手写LRU缓存

思路图片先理解说明head的next节点就是链表的最后一个(我们把链表最右边当成第一个),它就是最近最久未使用的数据tail的prev节点就是链表的第一个,它代表最新最火热的数据每次get一个元素,就把它放到链表第一个去,这张图如果get1,那么相当于1放到3前面去,链表从左到右就是2,3,1,了,1成为了最新最火热的数据,如下图每次put一个元素的时候,需要检查容量是否还够,如果不够就需要删除head的next节点,因为它是最近最久未使用的数据注意下面代码结合.

2021-03-21 15:16:57 129

原创 深度拷贝带随即指针的链表

解法一(HashMap)/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}*/class Solution { public Node copy.

2021-03-21 10:40:12 98

原创 设计模式总结和对比

文章目录七大设计原则创建型设计模式结构型设计模式行为型设计模式使用频率比较创建型设计模式结构型模式行为型模式直达设计模式文章专栏七大设计原则创建型设计模式结构型设计模式行为型设计模式使用频率比较创建型设计模式高频工厂方法模式抽象工厂模式单例模式建造者模式低频原型模式结构型模式高频代理模式门面模式装饰器模式享元模式适配器模式组合模式低频桥接模式行为型模式高频模板方法模式策略模式责任链模式状态模式

2021-03-13 14:53:33 81

原创 设计模式之访问者模式(行为型)

定义概念它是一种将数据结构与数据操作分离的设计模式,指封装一些作用于某种数据结构中的各元素的操作应用场景数据结构稳定,作用于于数据结构的操作经常变化的场景需要数据结构与数据操作分离的场景需要对不同数据类型(元素)进行操作,而不使用分支判断具体类型的场景写法CTO和CEO去访问员工的业绩,但两者关注的点不一样,CTO关注代码数量和产品数量,CEO关注KPIpublic interface IVisitor { void visit(Engineer engineer);

2021-03-13 14:11:13 74

原创 设计模式之观察者模式(行为型)

定义概念也称发布——订阅模式模型——视图模式源——监听器模式从属者模式定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,每当主题对象状态变化时,所有依赖于它的对象都会得到通知并自动更新。核心将观察者与被观察者解耦,类似于消息/广播发送的机制联动两者,使被观察者的变动能通知到感兴趣的观察者们,从而做出相应的响应写法阿里巴巴旗下的蚂蚁金服发出招聘请求,自动推送给人们public class Alibaba extends Observable { priv

2021-03-13 10:55:40 91

空空如也

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

TA关注的人

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