给我个offer吧
文章平均质量分 88
loading。。。
这个作者很懒,什么都没留下…
展开
-
java 框架
AOP(面向切面编程)是一种编程范式,它是面向对象编程(OOP)的一种补充。AOP旨在通过将横切关注点(例如日志记录、安全性、事务管理等)从应用程序的核心业务逻辑中分离出来,从而提高代码的模块化性和可维护性。在传统的面向对象编程中,一个类通常负责一个特定的功能,而横切关注点则散布在各个类的方法中。这样导致了横切关注点代码的重复和散乱,不利于代码的维护和扩展。AOP的目标是将这些横切关注点从各个类中剥离出来,并通过特殊的方式将它们应用到需要的地方,从而使代码更加简洁和易于维护。原创 2023-08-04 14:02:54 · 208 阅读 · 0 评论 -
java 并发
线程是进程中的最小执行单元,是CPU调度的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源,包括内存空间、文件描述符等。线程之间可以并发执行,使得程序可以同时处理多个任务,提高了系统的响应能力和并发性。进程是操作系统中的一个执行实例,是程序在计算机上的一次执行活动。每个进程都有自己独立的内存空间和系统资源,进程之间是相互独立的。进程的切换代价相对较高,因为需要保存和恢复进程的所有状态信息。为什么要有线程?在单核CPU时代,进程是独立运行的,每个进程有自己的地址空间,进程之间切换开销大。原创 2023-08-03 00:46:18 · 177 阅读 · 0 评论 -
JVM 学习
自定义类加载器可以继承ClassLoader类并重写其findClass()方法来实现自定义的类加载逻辑。在某些特定需求下,可能需要自定义类加载器来加载一些特殊的类,例如从网络、数据库或特定资源中加载类。原创 2023-08-02 01:18:21 · 551 阅读 · 0 评论 -
java 基础
Java的基本数据类型是一组预定义的数据类型,用于存储简单的值,而不是对象。Java中的基本数据类型具有固定的大小和默认值。byte:1字节,范围为-128到127。short:2字节,范围为-32,768到32,767。int:4字节,范围为-231到231-1。long:8字节,范围为-263到263-1。float:4字节,范围为IEEE 754规定的浮点数范围,一般精度为6-7位小数。double:8字节,范围为IEEE 754规定的浮点数范围,一般精度为15位小数。原创 2023-08-01 00:50:35 · 81 阅读 · 0 评论 -
如如何看待理论和实践的关系
理论和实践是密不可分的两个方面,在软件开发领域尤其如此。它们之间的关系可以被概括为:理论指导实践:理论是经验和知识的积累,为实践提供指导。在软件开发中,理论包括算法、设计模式、编程原则等。理论帮助开发人员理解问题的本质,提供解决问题的思路和方法,从而指导实际的编码和开发过程。实践验证理论:实践是将理论付诸于实际的过程,通过实际开发项目来验证理论是否有效。有时候,理论可能看起来很好,但在实际应用中可能会遇到各种挑战和限制。通过实践,我们可以发现理论的局限性并进行改进,也可以验证理论是否适用于特定的场景。原创 2023-07-28 00:24:19 · 381 阅读 · 0 评论 -
c++ 学习记录
https://www.whcsrl.com/blog/1031879原创 2021-11-11 15:17:45 · 101 阅读 · 0 评论 -
SpringMVC, java, 过滤器, 拦截器, 监听器, Filter, Intercept, Listener
文章目录一.过滤器1.java代码,写个类实现Filter接口(implements Filter)2.在web.xml如下小菜:1.判断是否是Ajax请求2.另外一般出来编码问题的时候会直接在web.xml中加上这段:这个不需要再写java代码,因为它指向的代码是org.springframework.web.filter.CharacterEncodingFilter已经存在的。直接复制可用,无需改动。二.拦截器1.java代码部分,需要一个继承了HandlerInterceptorAdapter抽象类原创 2020-10-12 15:54:44 · 295 阅读 · 0 评论 -
分布式事务,这一篇就够了
文章目录基础理论事务分布式事务强一致性、弱一致性、最终一致性CAP 原则BASE 理论柔性事务幂等操作分布式事务使用场景转账下单扣库存同步超时分布式事务的解决方案两阶段提交/XATCC本地消息表可靠消息最终一致性尽最大努力通知分布式事务实战两阶段提交/XATCC可靠消息最终一致性本地消息表最大努力通知总结基础理论事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务应该具有原创 2020-09-16 14:37:24 · 412 阅读 · 0 评论 -
面试之不得不说的数据库索引
文章目录MySQL索引原理索引目的索引原理磁盘IO与预读索引的数据结构详解b+树b+树的查找过程b+树性质建索引的几大原则B+Tree相对于B-Tree有几点不同:索引实战题型一题型二题型三题型四题型五MySQL索引原理索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引原创 2020-09-15 16:52:43 · 124 阅读 · 0 评论 -
详解java锁之java“锁“事
文章目录1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍1. 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说概念。对于同一个数据的原创 2020-09-14 16:05:40 · 196 阅读 · 0 评论 -
线程安全的List, 从Vector 到 SynchronizedList 到 CopyOnWriteArrayList
文章目录大部分人会脱口而出:用Vector,这样只会让面试官鄙视!除了Vector,你还会别的吗?你至少还得说得上这种:java.util.Collections.SynchronizedList它能把所有 List 接口的实现类转换成线程安全的List,比 Vector 有更好的扩展性和兼容性,Syfinal List list;SynchronizedList(List<E> list) { super(list); this.list = list;}nch原创 2020-09-10 16:27:35 · 314 阅读 · 0 评论 -
彻底搞懂String, 字符串常量池, intern方法
来看一段代码:public static void main(String[] args) { String s = new String("1"); s.intern(); String s2 = "1"; System.out.println(s == s2); String s3 = new String("1") + new String("1"); s3.intern(); String s4 = "11"; System.out原创 2020-09-09 10:29:39 · 203 阅读 · 0 评论 -
面试: 再看数据库与缓存一致性问题
读取数据库是比较耗时的操作,如果每次都需要去数据库读取数据,会对数据库造成一定的压力,程序性能也会比较低下,所以需要引入缓存。缓存是提升程序性能的最重要、最有效、也是最简单的手段之一。引入缓存后,读操作会先去缓存中看下,如果没有命中缓存,才去读取数据库,然后把读取出来的数据再放到缓存中去,这样下一次读操作就可以命中缓存了,如果命中缓存,就可以直接把数据返回出去了。写操作,除了修改数据库,还需要删除缓存,因为不删除缓存,读的操作读到的永远都是缓存中的旧数据。先删除缓存,后修改数据库这个方案显然是有原创 2020-09-07 16:41:41 · 152 阅读 · 0 评论 -
面试: 排序算法总结
文章目录排序算法总结一、排序算法种类二、性能比较三、使用场景简单排序算法冒泡排序选择排序插入排序复杂排序算法快速排序归并排序堆排序希尔排序高级排序算法计数排序基数排序桶排序排序算法总结查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还原创 2020-09-07 14:53:12 · 211 阅读 · 0 评论 -
海量数据面试题
文章目录1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?2. 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。4. 海量日志数据,提取出某日访问百度次数最多的那个IP。5. 在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.原创 2020-09-04 15:25:08 · 239 阅读 · 0 评论 -
彻底搞懂 MySQL 事务的隔离级别
MySQL的事务隔离级别一共有四个,分别是读未提交、读已提交、可重复读以及可串行化。文章目录事前准备数据事务并发可能出现的情况脏读(Dirty Read)不可重复读(Non-Repeatable Read)幻读(Phantom)事务的隔离级别读已提交(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)隔离级别的实现原理查看当前会话隔离级别设置隔离级别事前准备数据mysql> create table city( -> id原创 2020-09-04 13:46:06 · 489 阅读 · 1 评论 -
Java中创建对象的5种方式
文章目录1.使用new关键字2.使用Class类的newInstance方法3.使用Constructor类的newInstance方法4.使用clone方法5.使用反序列化作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和原创 2020-09-04 10:50:20 · 193 阅读 · 0 评论 -
Java对象的序列化和反序列化, serialVersionUID作用
文章目录一、序列化和反序列化的概念二、JDK类库中的序列化API三、serialVersionUID的作用一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对原创 2020-09-04 10:42:47 · 220 阅读 · 0 评论 -
Java 并发编程:volatile的使用及其原理
文章目录一、volatile的作用二、volatile的使用三、volatile的原理一、volatile的作用我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用Synchronized来解决问题。而volatile关键字就是Java中提供的另一种解决可见性和有序性问原创 2020-09-03 11:03:10 · 129 阅读 · 0 评论 -
Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
一、线程的状态Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。New:新建状态,当线程创建完成时为新建状态,即new Thread(…),还没有调用start方法时,线程处于新建状态。Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源。处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来调度。Running:运原创 2020-09-03 09:51:13 · 101 阅读 · 0 评论 -
Java 并发编程:CAS、ABA问题、Synchronized底层优化, 偏向锁、轻量级锁、 重量级锁、原理与实现,悲观锁,乐观锁
一、重量级锁现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。JDK中对Synchronized做的种种优化,其核心都是为了减少这种重量级锁的使用。原创 2020-09-02 15:45:18 · 232 阅读 · 0 评论 -
面试之redis事务
MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行。 > 在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。因此,Redis事务能够保证原子性。EXEC命令会触发执行事务原创 2020-08-20 17:33:55 · 132 阅读 · 0 评论 -
leetcode 33. 搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], target =原创 2020-08-17 17:19:36 · 88 阅读 · 0 评论 -
session和cookie区别
本来 session 是一个抽象概念,开发者为了实现中断和继续等操作,将 user agent 和 server 之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。 而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。可以认为是 session 的一种后端无状态实现。而我们今天常说的 “session”,是为了绕开 cookie 的各种限制,通常借助 cookie 本身和后端存储实现的,一种更高级的会话状态实现。所以 cookie原创 2020-08-14 16:49:27 · 87 阅读 · 0 评论 -
面试, Mysql优化, MySQL性能优化的21个最佳实践
文章目录1. 为查询缓存优化你的查询2. EXPLAIN 你的 SELECT 查询3. 当只要一行数据时使用 LIMIT 14. 为搜索字段建索引5. 在Join表的时候使用相同类型的列,并将其索引6. 千万不要 ORDER BY RAND()7. 避免 SELECT \*8. 永远为每张表设置一个ID9. 使用 ENUM 而不是 VARCHAR10. 从 PROCEDURE ANALYSE() 取得建议11. 尽可能的使用 NOT NULL12. Prepared Statements13. 无缓冲的查询原创 2020-08-03 16:42:42 · 304 阅读 · 0 评论 -
ConcurrentHashMap实现线程安全的底层原理, 1.7和1.8的比较,vs hashtable
ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEntry 用来封装映射表的键 / 值对;Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个 HashEntry 对象链接起来的链表。一个 ConcurrentHashMap 实例中包含由若干个 Segment 对象组成的数组。Hash...原创 2020-04-26 09:23:58 · 1992 阅读 · 0 评论 -
Redis五种数据类型及应用场景, 原理加图解
一. 五种数据类型图解二. String类型string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。value其实不仅是String,也可以是数字。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据...原创 2020-04-25 21:01:52 · 725 阅读 · 0 评论 -
微信网页版二维码扫码过程发生了什么
第三方网站应用微信登录技术实现如下:二维码的获得用户打开网站后,网站后台根据微信OAuth2.0协议向微信开发平台请求授权登录,并传递事先在微信开发平台中审核通过的AppID和AppSecrect等参数;微信开发平台对AppID等参数进行验证,并向网站后台返回二维码;网站后台将二维码传送至网站前端进行显示;微信客户端授权登录用户使用微信客户端扫描二维码并授权登录;微信客户端...原创 2020-04-25 18:04:01 · 887 阅读 · 0 评论 -
设计模式七大原则, 单一职责原则,开闭原则, 里氏替换原则, 依赖倒置原则, 接口隔离原则,合成/聚合复用原则 迪米特原则
1.单一原则(Single Responsibility Principle):一个类或者一个方法只负责一项职责,尽量做到类的只有一个行为原因引起变化;a、业务对象(BO business object)、业务逻辑(BL business logic)拆分;2.里氏替换原则(LSP liskov substitution principle):子类可以扩展父类的功能,但不能改变原有父类的功...原创 2020-04-18 17:42:43 · 1634 阅读 · 0 评论 -
盛最多水的容器,LeetCode#11, 双指针
盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。题解: 双指针做法, 分别指向两端, 然后每次移动短的一边指向的, 比如说[1,8,...原创 2020-04-18 09:48:45 · 143 阅读 · 0 评论 -
String,StringBuffer,StringBuild区别与联系
(1)string 1,Stirng是对象不是基本数据类型 2,String是final类,不能被继承。是不可变对象,一旦创建,就不能修改它的值。 3,对于已经存在的Stirng对象,修改它的值,就是重新创建一个对象,然后将新值赋予这个对象 不可改变的Unicode字符序列池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源 以减少存储空间的开销。在...原创 2020-04-17 11:22:24 · 198 阅读 · 0 评论 -
HashMap实现原理及源码分析, 面试
一. 实现原理HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。//HashMap的主干数组,可以看到就是一个Entry数组,初始值为空数组{},//主干数组的长度一定是2的次幂,至于为什么这么做,后面会有详细分析。transient Entry<K,V>[] table = (Entry<...原创 2020-04-16 22:03:15 · 311 阅读 · 0 评论 -
数据库重要的五个概念
1. 缓存与数据库一致性问题, 对着个问题深有体会, 这是之前美团面试官的问题, 当时的回答并没有答得多么好, 只说到了先删缓存再修改数据库, 以及线程加锁, 之后写了一篇博客深入学习了下, 分很多种情况, 在先操作数据库还是先操作缓存的问题上通用的是先淘汰缓存再写数据库, 缓存与数据库的操作的架构上的优化主流方案是, 增加一个服务层来向上层屏蔽数据访问与修改的细节., 非主流的是所有写操作走数据...原创 2020-04-15 08:54:30 · 354 阅读 · 0 评论 -
正则表达式匹配, LeetCode10, 动态规划
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。’.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”p = “...原创 2020-04-10 11:38:25 · 140 阅读 · 0 评论 -
红黑树与平衡二叉树的原理和区别
一.平衡二叉树平衡二叉树或者是空树,或者是具有如下特征的二叉排序树:(1 )左子树和右子树的深度之差的绝对值不超过1;(2)左子树和右子树也是平衡二叉树。若将二叉树上结点的平衡因子(Balance F a ctor, BF)定义为该结点左子树和右子树的深度之 差,则平衡二叉树上所有结点的平衡因子只可能觅-1、0和1。只要二叉树上有一个结点的平衡 因子的绝对值大于1 , 则该二叉树就是不平衡...原创 2020-04-09 16:28:13 · 6862 阅读 · 1 评论 -
括号生成,LeetCode #22
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]题解:已用的左括号数一定不小于已用的右括号数, 这样可以剪枝很多, 而且这样得到的序列是满足要求的, 故dfs即可还有一种方式是递推, 动态规划, 合法序列...原创 2020-04-09 10:09:23 · 87 阅读 · 0 评论 -
面试之HTTPS, HTTP与HTTPS的区别, HTTPS的请求流程
一.Http与https的区别HTTP:超文本传输协议。HTTPS:安全套接字层超文本传输协议HTTP+SSLHTTP:客户端和服务器端传递的是明文的消息。HTTPS:将明文进行加密后再在客户端和服务器之前进行传递。HTTP采用80端口,而HTTPS采用443端口。HTTPS需要申请证书。HTTPS采用非对称加密和对称加密两种加密方式来保证传输信息的安全性:...原创 2020-04-08 18:34:19 · 500 阅读 · 0 评论 -
图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK
一. FCFS 调度(先来先服务)磁盘调度的最简单形式当然是先来先服务(FCFS)算法。虽然这种算法比较公平,但是它通常并不提供最快的服务。例如,考虑一个磁盘队列,其 I/O 请求块的柱面的顺序如下:98,183,37,122,14,124,65,67如果磁头开始位于柱面 53,那么它首先从 53 移到 98,接着再到 183、37、122、14、124、65,最后到 67,磁头移动柱面的...转载 2020-04-08 18:25:33 · 68387 阅读 · 14 评论 -
机器人的运动范围,LeetCode 面试#13, vector 形参前加&, 未加是传值
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少...原创 2020-04-08 09:11:03 · 110 阅读 · 0 评论 -
笔试选择题相关
1.选择在最近的过去很久未访问的页面予以淘汰的算法称为()。正确答案: BOpt.LRUMFULFUOPT:Optimal page replacement algorithm 最佳页面替换算法。预测哪个页面最晚出现,就替换哪个页面。LRU:Least Recently Used 不要译成“近期最少使用算法”,Recently Used是“最近使用”,Least为否定词,结果...原创 2020-04-07 18:24:24 · 826 阅读 · 0 评论