String类型是我们使用最频繁的数据类型,没有之那么提高String的运行效率,无疑是提升程序性能的最佳手段。
我们本文将从String的源码入手,一步步带你实现字符串优化的小目标。不但教你如何有效的使用字符串,还为你揭晓这背后的深层次原因。
本文涉及的知识点,如下所示:
在看如何优化String之前,我们先来了解一下String的特性,毕竟知己知彼,才能百战不殆。
头条二面
二轮技术面,100~20:2晚饭时间hr小姐姐还特贴心的带我体验了一把传说中的头条餐厅,不超过半小时
聊项目,画项目架构,画一个用户从发起请求到接收到响应中间经过哪些服务每个服务做什么事情的流程讲项目中的难点、挑战,你是如何解决的redis中有几种类型&各自底层怎么实现的&项目中哪个地方用了什么类型,怎么使用的redis如何实现分布式锁,zk如何实现分布式锁,两者的区别。如果service还没执行完,分布式锁在redis中已经过期了,怎么解决这种问题synchronized底层实现,加在方法上和加在同步代码块中编译后的区别、类锁、对象锁锁升级的过程java运行时区域及各个区域的作用、对GC的了解、java内存模型及为什么要这么设计对索引的理解,组合索引,索引的最佳实践countDownLatch用过没有,在项目中如何使用的,对aqs的了解写生产者消费者问题,考虑高并发的情况,可以使用Java类库,白纸写代码如下所示
设计一个发号器,考虑集群和高并发的情况,要求发号器生成的id是递增趋势,通过id可以区分出来是今天生成的id还是昨天生成的id,但是生成的id中不能直接带有日期,要具有一定的混淆功能,白纸写代码一个二位数组,每个元素都可以往上下左右四个方向走,寻找最长递增路径。如下所示,最长递增路径即红色字体路径。白纸写代码。
美团四面
电话面试+现场三轮技术面试+hrbp面试
数据库和缓存的一致性问题。先更新数据库,再更新缓存,若更新完数据库了,还没有更新缓存,此时有请求过来了,访问到了缓存中的数据,怎么办?聚簇索引/非聚簇索引,mysql索引底层实现,为什么不用B-tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方mysql默认的事务隔离级别,mvcc,rr怎么实现的,rc如何实现的mysql间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的sql语句,死锁发生了如何解决,mysql有没有提供什么机制去解决死锁谈下对GC的了解,何为垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的区别,emm,还有一个直击灵魂的问题,看过cms的源码吗,笑cry有没有排查过线上oom的问题,如何排查的有没有使用过jvm自带的工具,如何使用的假设有下所示的一个fullgc的,纵向是内存使用情况,横向是时间,你如何排查这个fullgc的问题,怎么去解决你说出来的这些问题。
说说对java中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的对CAS的理解,CAS带来的问题,如何解决这些问题volatile底层、synchronized底层、锁升级的过程、MESIehcache支持哪些缓存juc有研究没有,讲一讲聊项目,画项目架构,画一个用户从发起请求到接收到响应中间经过哪些服务每个服务做什么事情的流程讲项目中的难点、挑战,如何解决的,项目这一块会问的特别细如何保证RocketMQ消息的顺序性,如何解决重复消费问题项目中如何保证接口的幂等操作讲一讲对redis的了解,项目中如何使用的,哪个地方使用的,为什么要使用哨兵机制、redis两种备份方式的区别,项目中用的哪种,为什么讲一讲对分布式锁的了解项目中系统监控怎么做的如何理解Spring中的AOP和IOC,以及DI,读过Spring源码没有读过MyBatis源码没有说一个你了解最多的框架,说出你的理解如何理解分布式事务,为什么会出现这个问题,如何去解决,了解哪些分布式事务中间件聊一聊对分库分表的理解hystrix功能&在项目中怎么使用的&hystrix怎么检测断路器是否要开启/关闭&hystrix实现原理,除hystrix之外的其他熔断限流中间件有了解没有,了解多少说多少dubbo有了解没有怎么理解java中和mysql中的乐观锁、悲观锁一致性hash
一个final修饰的属性,定义的时候没有初始化,在无参构造函数中初始化,可以吗,为什么说说对java中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的,为什么不用其他的集合类hashMap,concurrentHashMap底层实现,list删除是怎么实现的,遍历的时候可以删除吗,为什么redis中有哪些数据结构,了解过其底层怎么实现的吗,和java中相似的数据结构的对比redis是单线程的还是多线程的,为什么这么快redishash中某个key过大,变为String类型的大key,怎么处理,使用中如何避免出现这种问题设计模式在项目中哪个地方用到了,怎么使用的,能不能画一个你熟悉的设计模式的UML,手写单例模式,手写静态内部类实现的单例模式讲一讲mysql索引,实际工作中,哪些场景用了b+tree索引,哪些场景用了hash索引explain可以看到哪些信息,什么信息说明什么,explain的结果列讲一下Spring源码看过没有,会多少讲多少MyBatis源码看过没有,会多少讲多少cas,cas的缺点,如何解决aqs,countDownLatch如何实现线程池如何实现,核心线程数和最大线程数设置成多少,为什么这么设置,项目中哪个地方使用了线程池,使用时需要注意什么mysql事务隔离级别,幻读,脏读,项目中用什么事务隔离级别,为什么volatile底层原理、synchronized实现机制,对XA、TCC的理解,了解哪些分布式事务框架,有什么缺点feign和dubbo,了解多少说多少eureka和zookeeper,了解多少说多少hystrix和sentinel,了解多少说多少Springcloudalibaba,了解多少说多少对分库分表、读写分离的了解,了解多少说多少画一下java线程几个状态及状态之间互相转换的聊项目,画项目架构,画一个用户从发起请求到接收到响应中间经过哪些服务每个服务做什么事情的流程,讲数据库设计具体到部分表中有哪些字段emm我们部门体量比较大,可能需要加班,到凌晨两三点的那种,也可能通宵,通宵是大促期间,你能接受吗emm也会加班到十点,这个不是大促期间,但也不是每天,非常态情况,你能接受吗,你在哪里住,过来要多久,有男朋友吗一起去吃午饭吧,我们这边有员工餐厅,不了不了,我回家吃饭吧
下面是面试tmj之外的公司中遇到的一些问题哈,tmj中已经被问到的就不再重复写了,只写一下个别公司中我还记得的面试题
算法题
[1,1,2,2,3,4,4,5,5,5]找出不重复的元素反转链表,要求时间复杂度O,空间复杂度O非递归实现斐波那契数列这一周股市价格为[2,6,1,4,8],求哪一天买入哪一天卖出,可获得最大收益,最大收益为多少按照箭头方向查找二叉树
表abc之间用id关联,求阴影部分的数据
一个整形无序数组,里面三个数只和等于一个目标值,求这三个数链表问题
扑克牌问题有十张扑克牌,从上面开始抽,抽出一张放桌子上,然后再抽出一张放扑克牌的最下面,这样循环往复的操作,直到手里的牌都没有了。这时,桌子上牌的顺序正好是123456789要求写代码求出原顺序手写大顶堆手写LRU算法字符串相加两个数字类型的字符串,直接转int或者double肯定都放不下,然后求这两个数的和,返回值还是字符串,15分钟时间,要求无bug寻找目标值位置有一个二维数组,数组横向有序,纵向有序,求目标值的位置,10分钟时间求字符串“efabcbaefehiabcba”中最长的回文数,不去重反转int类型的值x,不要借用String,只用int即可。&&针对该程序,写出其应有的测试用例topK问题
写在最后
文章为作者独立观点,不代表股票交易接口观点