自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

624回锅肉的博客

一些总结

  • 博客(73)
  • 收藏
  • 关注

原创 贴近项目场景的回答

1.dubbo + zookeeper项目里使用dubbo都干了什么?有什么作用?dubbo是一个分布式服务框架,所以整个系统都使用了这个dubbo,比如我们负责的是订单模块的开发,也就是分布式中的订单服务。和别的服务进行交互,也都使用的dubbo,因为它也是一个rpc框架。它的作用就是协调分布式中各个服务,理清调用关系等功能。zookeeper作为dubbo的注册中心,ZK可以用来管理和维护服务提供者的列表,实现服务提供者和消费者在注册中心对服务的注册和订阅功能。2.redis项目里使用redi

2022-03-13 17:15:00 3121

原创 ActiveMQ

消息队列1.什么是消息队列?它解决了什么问题?(可以用来干什么?)具体怎么解决的?有什么好处?带来了什么问题?2.JMS和AMQP每个是什么?它们有什么模式和数据类型?区别是什么?3.ActiveMQ是什么?用来干什么?里面有什么模式?1.消息队列就是一个存储消息生产者生产海量消息的地方,然后消息消费者就可以异步地从消息队列中进行消费。它主要解决了三个问题:异步(减少用户相应时间,提高用户体验),削峰(促销活动时,用来存储海量请求,然后慢慢处理积压在队列里的请求),解耦(A调用B,C,D后面如果需

2022-03-13 15:20:46 1093

原创 Solr + ZooKeeper

1.什么是Solr?2.什么是倒排索引?3.Solr和ElasticSerach有什么相同点和不同点?1.Solr是基于Lucene的全文搜索平台。它使用倒排索引机制可以实现快速的全文搜索与查找。2.倒排索引里有field和document的概念。想正常的搜索都是知道商品具体的名字后来进行查找,是先知道document这种,然后去查找对应的field。这是正排索引。(然后举自己项目具体的例子)倒排索引就是我们的输入和整理的索引是field,也就是每个商品的关键词。然后通过这个field索引就可以查询

2022-03-13 12:10:24 2574

原创 Redis

1.介绍一下RedisRedis是由C语言写的一个数据库,是Key/Value结构的。它直接把数据保存在内存当中,它也可以把内存中的数据持久化到磁盘里。特点是速度快,常见的用法有加在数据库之前的缓存,分布式锁(Redison),还有简单的消息队列。2.说一下Redis和Memcached的相同与区别相同:1.它们都把数据存储在内存里。2.它们都是Key/Value结构的数据库。不同:1.Redis有更丰富的数据类型,而Memcached单一。只有string。2.Redis不仅可以把数据存.

2022-03-11 17:48:32 1553

原创 RPC + Dubbo

参考javaguide里的dubbo面试题。1.RPC什么是RPC?RPC是远程过程调用,Remote Procedure Call。可以实现像本地方法调用那样方便地进行不同服务器之间的方法调用。RPC的原理是什么?先画一张图:首先客户端把要调用的方法,类,方法参数等传递给client stub(客户端桩)。然后客户端桩把这些序列化为RpcRequest,并由网络传输给另一台服务器(使用socket或者netty)。然后server stub(服务端桩)把传输过来的RpcRequest进行反

2022-03-10 16:21:24 597

原创 项目的总结

订单模块和搜索模块的后端开发SSM + Dubbo + Redis + Solr + ActiveMQ它是一个卖茶的电商平台,使用的是SOA也就是面向服务的架构。1.SOA面向服务的架构传统架构->分布式架构->面向服务的架构使用session复制:(传统架构)1个tomcat理论最多支持500并发(但实际上一般在300左右)。所以需要多个tomcat来做集群(多个服务器部署同一套代码)。然后通过负载均衡服务器来进行负载的分配,如nginx(engine x)服务器。那是不是集

2022-03-09 21:49:38 507

原创 牛客剑指offer易错点

JZ4 重建二叉树注意两点:1.左子树长度为k-inS(inS刚开始是为0,但是在递归参数中inS是不断变化的)2.递归结束条件为preS>preE或inS>inE,返回null。(当preS== preE和inS ==inE时可以继续创建这个节点)...

2021-08-17 20:10:41 149

原创 西安爱学思面经

过程:1.先笔试2.hr面3.技术面4.boss面笔试只要不要完全空白就可以继续问题总结:1.用过哪些集合?list set map特性 联系和区别2.hashmap什么时候扩容 负载因子 怎么扩容 整个过程3.栈的应用场景4.操作系统中进程的通信方式多线程的同步方式5.程序编译,链接等整个过程重定向在哪个阶段6.抽象类和接口的区别主要是抽象类的使用(用的少,去用几个demo试试)7.linux文件的压缩和解压的常用命令一些需要提高的点:1.没有录上音,下次技术面

2021-04-28 20:42:20 243 2

原创 mysql

4.1 MySQL4.1.2 什么是MySQL?mysql是一个开源的关系型数据库。默认端口为3306。4.1.3 mysql存储引擎有哪些?myisam和InnoDB。myisam是早期mysql的默认存储引擎,而InnoDB是现在mysql的默认存储引擎,支持事务。用show engines;命令查看mysql的所有存储引擎后,发现只有InnoDB引擎是支持事务的,剩下的都不支持事务。MyISAM和InnoDB有什么区别?1.myisam不支持事务,而InnoDB支持事务2.myisam

2021-04-06 16:22:20 196

原创 操作系统

一:基础1.1 什么是操作系统?1.它是管理电脑硬件和软件的程序,是计算机的基础设施。2.它屏蔽了硬件的复杂性。3.它的内核(kernel)是核心的部分。内核负责内存和硬件设备的管理,文件系统和应用程序的管理等。内核连接了硬件和应用程序,是它们的桥梁,决定了计算机系统的性能和稳定性。1.2 什么是系统调用?进程在操作系统中有两个状态:一个是用户态,一个是内核态。应用程序一般的操作都是在用户态进行的,也就是管理用户数据,进行一些用户操作。但是总会有一些需要更底层的需要操作系统来完成的操作,

2021-03-31 20:37:26 199

原创 计算机网络

3.1.1 OSI与TCP/IP各层的结构与功能,都有哪些协议?OSI七层协议:从下到上,1.物理层2.数据链路层3.网络层4.传输层5.会话层6.表示层7.应用层TCP/IP四层协议:从下到上,1.网络接口层2.网络层3.传输层4.应用层折中的五层协议:从下到上,1.物理层2.数据链路层3.网络层4.传输层5.应用层每层都是干什么的?1.物理层:物理层传输比特流。物理层的作用是:在两个计算机节点之间传输比特流,尽可能忽略传输介质以及物理设备之间的差异。2.数据链路层:主机之间的数据

2021-03-26 19:11:22 260

原创 java语言基础

2.1.1. ⾯向对象和⾯向过程的区别1.在性能方面:面向过程的性能要好于面向对象。因为面向对象有对象的概念,需要实例化对象,这会消耗大量的资源。所以面向对象的性能差一些。2.在可维护性,可扩展性方面:面向对象的可维护性和可扩展性要好的多。因为面向对象有封装,继承,多态等特性,会使系统的可维护性和可扩展性更好。java比较慢是因为:java并不是像面向过程语言编译为机器码后让机器执行,而是使用字节码.class让虚拟机去执行,所以慢一些。2.1.1. Java 语⾔有哪些特点?1.简单易学

2021-03-23 16:13:08 650

原创 10.之字形打印二叉树

题目:把二叉树按之字形层序遍历,每层单独保存,最后返回。public ArrayList<ArrayList> zigzagLevelOrder (TreeNode root)思路:基本思路是层序遍历每层单独保存。这是用size固定,然后把每次size的元素放到一层中保存。不同的是有正向的,有反向的。用一个栈,来实现反向的。(就是先放到栈里,再拿出来保存)。用栈,不会增加时间和空间的复杂度。(时间上语句没有嵌套,而且需要使用队列) /* 隔行打印层序遍历,用size保存

2021-03-23 15:12:10 103

原创 9.符号序列

题目:一个字符串里只有[ ] ( ) { }这6个符号,每队各自前后匹配,问这个字符串是不是匹配的。如[()]是匹配的,[{]}是不匹配的。public boolean isValid (String s)思路:用栈存放,拿栈顶元素和下一个元素比较,如果匹配的话pop栈顶元素,如果不匹配就放到栈里。最后如果完全匹配了,栈为空,否则就没有完全匹配。 /* 思路: 把元素放到栈里,匹配了就弹出,看看最后栈是否为空 */ public boolean isValid (S

2021-03-23 10:57:02 491

原创 8.无重复元素的子串的最大长度(子串——最大长度)

题目:求无重复元素的子串的最大长度。public int maxLength (int[] arr)思路:子部分求最大某属性,动态规划dp[j](需要另一个下标就声明为dp[j])dp[j]表示以arr[j]结尾的没有重复元素子串的最大长度。arr[i]是离arr[j]左边最近的等于arr[j]的元素(重复元素),arr[i]==arr[j]。举个例子: dp[j]怎么由dp[j-1]获得如dabca,abca 满足dp[j-1] >= j-i时,dp[j]=j-i当dp[j-1]&lt

2021-03-19 16:30:34 375

原创 7.连续子数组的最大和(子数组——最大和)

题目:给一个数组,让求连续数组元素的最大和。public int maxsumofSubarray (int[] arr)思路:连续子数组的最大和 动态规划 dp[i]dp[i]表示以arr[i]结尾的连续子数组的最大和。arr[i]必须加上,就不判断arr[i]是正还是负。dp[i]等于arr[i]加上以上一个元素为结尾的最大和dp[i-1],但是需要判断dp[i-1]的正负,如果是正的则加上,负的就不加,加0。时间复杂度为O(n),空间复杂度为O(1),所以只能在arr上修改,不能创建新数

2021-03-18 11:39:28 168

原创 6.跳台阶 && 变态跳台阶

题目:有n个台阶,青蛙一次能跳1个,一次也能跳2个。问跳完这n阶台阶,有多少种跳法?public int JumpFloor(int target)思路:先分析问题,发现是斐波那契数列。先想到可以用递归去做,但是效率不好,不是最好的方法。然后就想到递推,从刚开始的两个变量加来得到下一个数。然后不断地覆盖这两个变量。来得到答案。 /* 斐波那契数列,可以递归,但肯定不是最好的方法 递推,用两个变量不断往下计算才是最好的方法 */ public int JumpFlo

2021-03-18 10:15:15 125

原创 java集合

2.2.1. 说说List,Set,Map三者的区别?从储存元素的角度看:List:存储的元素是有序的(有顺序),可以重复。Set:存储的元素是无序的,不可以重复。Map:存储的是<key,value>的键值对,key是无序的,不可重复。value是无序的,可以重复。一个key对应一个value。2.2.2. ArrayList 与 LinkedList 区别?ArrayList 与 LinkedList的使用场景是什么?1.是否线程安全:它们都不是线程安全的2.它们的底层结构:

2021-03-17 20:24:30 142

原创 5.两数之和

题目:给一个数组,一个目标和target。已知数组里只有两个和等于target(唯一解)。求这两个数的下标,并放到res[]里返回(下标从1开始)。public int[] twoSum (int[] numbers, int target)思路:1.暴力循环。O(n^2)2.用哈希表(HashMap实现)先把所有的以数值为key,以对应的下标为value存储。然后从第一个开始,把自己想要的差值从map里找(但是如果target为自己的2倍,还应加上想要的差值不能等于自己的判断)。然后从第一个开

2021-03-17 11:41:56 86

原创 4.合并两个有序链表

题目:两个链表有序,合成一个新的链表,也有序,且不创建新节点。public ListNode mergeTwoLists (ListNode l1, ListNode l2)思路:1.把l1和l2最小的头结点作为新链表的head2.关键:l1和l2往后遍历,把更小的链接到新链表中。然后新链表就有序了。3.最后把l1或l2剩下的一段链接到里面。注意:加上l1和l2的判空。当l1为null时直接返回l2(l2可以为null也可以不为null)。 /* 思路: 1.两链表最小的头结

2021-03-16 12:00:10 93

原创 3.实现二叉树先序,中序和后序遍历

题目:给一个root,分别把preorder,inorder,postorder的结果放到数组,最后返回一个二维数组。public int[][] threeOrders (TreeNode root)思路:模拟实现1.二维数组的创建。这里使用先以行创建,int[][] result = new int[3][];先创建一个3行的,然后每个用result[0] = new int[nodeNum];创建,用result[0][i]去赋值。2.用ArrayList取存储每个node的值。先用Array

2021-03-16 10:35:10 151

原创 剑指 Offer 45 把数组排成最小的数

题目:给一个int数组,每个int可以进行拼接,返回一个最小的数。用String返回。public String minNumber(int[] nums)思路:用快速排序,用字典序进行排序。如”12”和”34”,可拼为”1234”或”3412”,前面小于后面,所以”12”应该排在”34”前面。 可记为”12”<”34”。用(strs[l]+strs[j]).compareTo(strs[j]+strs[l]) <= 0这种形式来制定排序规则。1.快速排序要背完整。一定是在循环里交

2021-03-15 14:33:37 68

原创 剑指 Offer 44 数字序列中某一位的数字

题目:序列化的数字,0123456789101112131415…。0对应第0位,9对应第9位,但是第10位为1。给你一个n,让你求第n位的数字是几?(0~9)public int findNthDigit(int n)思路:找规律题。1.先根据n来找到该数字的位数(1位数,1到9,有9位。2位数,10到99,有180位=9乘10乘2。3位数,100到999,有2700位=9乘100乘3。用interval-1表示该n与start=1/10/100…的距离,digit表示所求位数。可以使用whil

2021-03-12 20:57:28 73

原创 1.多线程基础

123

2021-03-10 17:28:24 129

原创 5.ThreadLocal类

1.什么是ThreadLocal?用来干什么?2.说说ThreadLocal是怎么实现的?3.说说ThreadLocal会带来什么问题?该怎么解决?1.Q:什么是ThreadLocal?用来干什么?A:ThreadLocal可以让每个线程绑定它自己的值,就像一个私有盒子,每个线程可以绑定它自己私有的数据。2.Q:说说ThreadLocal是怎么实现的?A:用的是ThreadLocal的静态内部类ThreadLocalMap实现的,它是定制的HashMap。threadlocals是Threa

2021-03-10 15:09:33 79

原创 剑指 Offer 43 1~n整数中1出现的次数

题目:输入一个int数,求1到到该数中1的次数。public int countDigitOne(int n)思路:1.用基本的方法,遍历+每位统计,时间复杂度O(nlog10n),复杂度太大。2.用每位固定为1,然后看有多少种情况。用找规律的方法来做。当前位分为3种情况,分别是0,1和2~9。对应的1的数量和规律不同。把数字分为当前位cur,高位high和低位low,用digit来表示当前的是什么位,digit等于1是当前是个位。然后cur,high,low不断变化,结果不断累积到res上,

2021-03-10 13:48:05 101

原创 剑指 Offer 42 连续子数组的最大和

题目:一个整数数组,有正数和负数。求连续的子数组的和。public int maxSubArray(int[] nums)思路:用动态规划,dp[i]。这里dp[i]表示以nums[i]结尾的连续数组的最大值。因为这连续数组不一定是从nums[0]开始的,但一定是以nums[i]结尾的。dp[i]为正数的话dp[i+1]就把dp[i]加上,如果是负数的话就不加,就直接是nums[i]。先把用dp[]的写出来,时间和空间复杂度都为O(n)。然后再把dp[i]和dp[i+1]用变量保存,进行空间优化

2021-03-09 11:45:08 70

原创 剑指 Offer 41 数据流中的中位数

题目:数据不断的进入,要求实现addNum()和findMedian()两个函数。来进行数字的添加和中位数的查找。public void addNum(int num)public double findMedian()思路:1.先说一下基本的思路:可以对目前的数据进行排序,如使用快速排序O(nlogn),然后直接返回中间的那个数O(1)。2.一:维护较大元素区间的minHeap和一个维护较小元素区间的maxHeap二:怎么维持?用什么条件判断?(addNum的实现内容)三:返回中位数时用什

2021-03-08 16:33:32 65

原创 8.AQS同步器

1.AQS同步器是什么?用来做什么?2.AQS同步器是怎么实现的?3.AQS同步器访问资源有哪些方式?用AQS同步器实现自定义的同步器应该怎么做?AQS同步器组件有哪些?1.Q:AQS同步器是什么?用来做什么?A:AQS同步器是AbstractQueuedSynchronizer,抽象队列同步器。它在java.util.concurrent.locks包下。它是用来针对具体需求自定义同步器的框架。**ReentrantLock,Semaphore(信号量),CyclicBarrier(循环屏障

2021-03-05 20:30:49 141 1

原创 3.CAS操作(轻量级锁)

CAS操作相关

2021-03-04 18:57:45 646

原创 剑指 Offer 40 最小的k个数

题目:给一个无序数组,求前k个最小的数,排好序放到数组里输出。public int[] getLeastNumbers(int[] arr, int k)思路:1.先用快速排序,然后直接用Arrays.copyOf(arr,k)截取前k个元素并复制为新的数组返回,原数组不变。快速排序(第一个元素为标准,且标准只在最后交换一次到中间)快速排序是以第一个元素为标准,但是这个标准不移动,而是让其它元素进行交换移动,最后才把标准交换到中间。标准只交换一次。快速排序自己实现实现 /* 快排,模板

2021-03-04 17:24:44 112 1

原创 模板题总结

1.回溯法解决全排列2.快速排序解决topK(找最小/最大的前k个数)

2021-03-04 15:40:28 82 1

原创 剑指 Offer 39 数组中出现次数超过一半的数字

题目:输出数组中数量超过一半的数字。要求1.数组中一定有数量超过一半的数字2.数组中可能没有数量超过一半的数字,此时返回-1public int majorityElement(int[] nums)思路:思路很浅显,就是先假定第一个数字为目标数字num,然后次数votes给1(用times也行)。遍历数组,如果后面那个元素和num相等则votes加1,不等则减1。当votes为0时,改变num为最新的假定目标数字。是这个思路,拿变量试一试就好。会用到nums[i+1],所以要做下标越界判断(如

2021-03-03 11:26:56 55

原创 7.Atomic原子类

1.说说什么是Atomic原子类?什么是原子性?Atomic原子类有什么作用?2.atomic包(JUC包)下分为哪几类?3.说说AtomicInteger怎么使用?4.说说AtomicInteger是什么实现的?原理?5.为什么使用Atomic原子类?Q:说说什么是Atomic原子类?什么是原子性?Atomic原子类有什么作用?A:Atomic原子类是在java.concurrent.atomic包(简称JUC包)下。它是提供变量原子操作的类。操作的原子性,也叫原子操作。指的是在多

2021-03-02 20:23:02 225

原创 剑指 Offer 38 字符串的排列

题目:求字符串的全排列,并返回。需要考虑字符串里有重复的字符,最后结果不重复才行。public String[] permutation(String s)思路:背模板,模板题。大致思路是第一个位置有n种放法,第二个位置有n-1种放法,然后实现用char[]中元素交换的回溯法traceback实现。背一下全排列基本回溯法:traceback为递归方法。从0开始递归,for循环里为交换x和i,递归,再把x和i交换回来。当递归参数x到倒数第一个时(最后一个已经确定),就把add进resList中。

2021-03-02 16:17:23 56

原创 6.线程池

Q:为什么要用线程池?线程池有哪些好处?A:1.不用来回频繁地创建和销毁线程。降低资源消耗。2.任务到达的时候就可以直接开始执行,而不用等待线程创建的过程。提高响应速度。3.为线程进行统一地进行分配,调优和监控。更好地管理线程。Q:让线程池执行任务需要实现哪些接口?它们有什么区别?最好用什么方式来创建线程池?A:让线程池执行任务需要实现Runnable接口或Callable接口,它们的区别在于实现Runnable接口不能返回结果,返回值为void。而实现Callable接口可以返回...

2021-02-28 20:45:38 96

原创 4.volatile关键字

Q:说说java内存模型,内存模型的变化带来了什么问题,怎么解决这个问题?A:在jdk1.2前线程如果想修改主内存中变量的值是可以直接修改的。但是现在jdk的内存模型是:如果线程想修改主内存中变量的值,需要先把它读到线程自己的工作内存中,然后在工作内存中进行变量的修改,然后把修改后的变量再写回主内存中。内存模型的变化带了数据的不一致性问题。当主内存中的一个变量被一个线程修改后,另一个线程还以为这个变量是之前自己工作内存中的变量,这样就出现了数据的不一致性问题。可以在变量前加上volatil...

2021-02-28 18:03:12 74

原创 剑指 Offer 36 二叉搜索树与双向链表

题目:把二叉搜索树转化为元素有序的双向循环链表。(因为二叉树有左右指针,双遍链表也有左右指针)public Node treeToDoublyList(Node root)思路:二叉搜索树的中序遍历为有序。所以用中序遍历。用pre指针保存上一层递归中root的指向(刚开始pre为null,可以确定head。然后pre比root慢一拍然后一直往后)。用pre和下一层递归的root进行连接。最后pre停在链表尾部,直接把pre当做尾,和head进行连接,然后返回。public class Bin

2021-02-28 13:34:05 62

原创 2.synchronized关键字

Q:说说synchronized关键字A: 用来线程同步 用在方法和代码块上 再解释一下线程同步Q:怎么使用synchronized关键字的,项目中怎么使用的A: 加在 static方法和非static方法 加在默认代码块和指定锁的代码块 的区别...

2021-02-27 20:30:42 99

原创 剑指 Offer 35 复杂链表的复制

题目:带有random指针的链表节点(可指向任意一个元素或null),完成该链表的复制。public Node copyRandomList(Node head)思路:使用Map<Node,Node>保存上下链表各元素之间的映射。平行对应,上面一个7对应下面的一个7。来完成random关系的复制。可以先走一遍把节点创建出来,并把Map做好。然后再来一遍,用上下一一对应的关系,把next和random的关系复制出来。时间:O(n)空间:O(n) Map额外空间为O(n),新创建的

2021-02-27 17:37:16 58

空空如也

空空如也

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

TA关注的人

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