算法和面试
文章平均质量分 55
算法和面试
小小书童DH
博主很懒,随便写写
展开
-
面试篇:nginx做负载均衡
配置反向服务代理器:什么是反向服务呢? 首先说下正向服务, 例如爬虫程序, 我们主动出击去获取资源. 而反向服务我们是等待用户来访问. 区别在于主动和被动.配置文件Nginx/conf/nginx.conf配置Nginx转发条件重启好Nginx后, 我们再来访问192.168.200.129 这台机器, 我么可以发现其实访问的是129.168.200.130这台机器.负债均衡的配置, 配置转发的权重: (另一台CentOS02 依然按照CentOS01的配置)我们在这里配置了两台转发机.原创 2021-08-27 09:33:19 · 303 阅读 · 0 评论 -
获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求)
详情原创 2021-08-26 14:37:09 · 3259 阅读 · 5 评论 -
MySql:锁
1. 意向锁(Intention Locks)InnoDB支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存,实际应用中,InnoDB使用的是意向锁。意向锁是指: 未来的某个时刻,事务可能要加共享/排它锁了,先提前声明一个意向。意向锁有这样一些特点:(1)首先,意向锁,是一个表级别的锁(table-level locking);(2)意向锁分为:意向共享锁(intention shared lock, IS),它预示着,事务有意向对表中的某些行.原创 2021-08-24 15:55:31 · 114 阅读 · 0 评论 -
面试篇:Spring的@Autowired 与@Resource
@Autowired按byType自动注入,@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。@Autowired@Aut.原创 2021-08-24 14:08:36 · 112 阅读 · 0 评论 -
MySql篇:性能
1. 大表数据查询,怎么优化优化shema、sql语句+索引;第二加缓存,memcached, redis;主从复制,读写分离;垂直拆分,根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key, 为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;2. 超大分页怎么处理?数据库层原创 2021-08-23 16:20:11 · 103 阅读 · 0 评论 -
算法篇:全排列
class Solution { List<List<Integer>> res=new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { List<Integer> arr=new ArrayList<Integer>(); back(nums,arr); return res;原创 2021-08-13 16:06:08 · 62 阅读 · 0 评论 -
算法篇:二叉树的前中后续迭代
中序遍历public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res=new ArrayList<>(); Stack<TreeNode> stack=new Stack<>(); TreeNode node=root; while(!stack.isEmpty()||node!=null){ while(node!=null原创 2021-08-12 14:59:07 · 67 阅读 · 0 评论 -
面试篇:redis为什么单线程
1. 为什么需要多线程首先,现在的CPU一般都是由多个核心组成,每个核心可以认为是一个独立的处理器,它们能够并行地处理任务。所以,如果我们的CPU是多核的,但是程序是单线程的,那么执行程序时,这个线程在某一个时刻只能在一个核心上运行,而其它的核心却是空闲的(如果没有其他程序的话)。所以,为了提高CPU的使用率,我们可以创建多个线程,每个线程处理任务的一部分(每个部分互不依赖),而每个核心执行一个线程,此时CPU的使用率将提高,程序的运行速度自然也就加快了。除此之外,假设我们的程序有A、B、C三个原创 2021-08-09 16:56:45 · 1109 阅读 · 0 评论 -
面试篇:String
底层原理分析在上篇文章《面试题系列第1篇:说说==和equals的区别?你的回答可能是错误的》中我们已经提到,String的两种初始化形式是有本质区别的。String str1 = "abc"; // 在常量池中 String str2 = new String("abc"); // 在堆上当直接赋值时,字符串“abc”会被存储在常量池中,只有1份,此时的赋值操作等于是创建0个或1个对象。如果常量池中已经存在了“abc”,那么不会再创建对象,直接将引用赋值给str1;如果常量池中没有“abc”原创 2021-08-05 10:51:34 · 58 阅读 · 0 评论 -
面试篇-线程池
线程池原创 2021-07-27 14:37:25 · 50 阅读 · 0 评论 -
面试篇-sql
sql原创 2021-07-25 16:04:05 · 57 阅读 · 0 评论 -
面试篇-Spring的bean的生命周期
Spring对Bean进行实例化(相当于程序中的new Xx())Spring将值和Bean的引用注入进Bean对应的属性中如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法(实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanDactory(BeanFactory bf)方法并..原创 2021-07-25 15:53:41 · 163 阅读 · 0 评论 -
mysql篇-事务的隔离级别
什么是事务的隔离性?两个人同时在一个画本上画画,过程中你一笔我一笔,那么最后最后画出来的一定是一个四不像,多个事务同时操作一个数据也会和上面的情况类似,所以为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离,事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行。如果不对事务进行隔离会有哪些问题?. 在数据库中,如果多个事务可以同时操作一个数据,那么就会产生脏读、重复读、幻读的问题。脏读出现原因:一个事务在对一条数据进行修改的过程中,其它的事务可以对数据进原创 2021-07-12 09:46:23 · 119 阅读 · 0 评论 -
面试篇SQL-分页查询之延迟关联
优化前:select * from t_trade_orderwhere create_time between '2019-10-17' and '2019-10-25'limit 1000000, 10;(create_time建表时被设置为普通索引)在create_time索引树上找到create_time=‘2019-10-17’的记录,取得其id。再到主索引树查到对于id的记录如数量小于10,更新时间,循环步骤1、2在create_time索引树取下一个值cre.原创 2021-07-08 17:00:26 · 447 阅读 · 0 评论 -
面试篇-Spring 拦截器和过滤器的区别?
1、实现原理不同过滤器和拦截器 底层实现方式大不相同,过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的。2、使用范围不同我们看到过滤器 实现的是 javax.servlet.Filter 接口,而这个接口是在Servlet规范中定义的,也就是说过滤器Filter 的使用要依赖于Tomcat等容器,导致它只能在web程序中使用。拦截器(Interceptor) 它是一个Spring组件,并由Spring容器管理,并不依赖Tomcat等容器,是可以单独使用的。不仅能应原创 2021-07-08 15:37:16 · 8711 阅读 · 2 评论 -
面试篇-SpingAOP的动态代理
1. 两者对比JDK动态代理是面向接口的。如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理来完成操作(Spirng默认采用JDK动态代理实现机制)CGLib动态代理是通过字节码底层继承要代理类来实现(如果被代理类被final关键字所修饰,那么抱歉会失败)。如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理。2.动态代理JDK动态代理的核心是InvocationHandler接口和Proxy类,在获取代理对象时,使用Proxy类来动态创建目标类原创 2021-07-08 16:09:55 · 135 阅读 · 0 评论 -
算法篇-大小顶堆
大顶堆:头部为堆中最大的值小顶堆:头部为队中最小的值PriorityQueue:一个具有优先级的队列,该优先级使得队列始终按照自然顺序进行排序,队列的头部为最小值。构造小顶堆:PriorityQueue small=new PriorityQueue<>();构造大顶堆:方法一:PriorityQueue big=new PriorityQueue<>(Collections.reverseOrder());reverseOrder() 方法用于获取一个比.原创 2021-07-07 18:17:37 · 302 阅读 · 0 评论