首页 > 编程知识 正文

字节跳动 sql面试题,字节跳动算法面试题

时间:2023-05-06 05:38:41 阅读:18466 作者:2649

11、HashSet和HashMap的区别:

12、HashMap和Hashtable的区别:

HashMap和Hashtable都实现了Map接口,但在决定使用哪一个之前必须弄清它们之间的区别。 主要区别在于线程安全、同步和速度。

HashMap几乎等效于Hashtable,并且可以接受null,除非HashMap是非同步的。 (HashMap被接受为空关键帧值(key )和值),但Hashtable不被接受。 )。

HashMap是非同步的,Hashtable是同步的。 这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable。 如果没有正确的同步,则多个线程不能共享HashMap。 Java 5提供了ConcurrentHashMap而不是HashTable,与HashTable相比具有更好的可扩展性。

另一个区别是,HashMap的迭代器(Iterator )是故障快速迭代器,而Hashtable的枚举器不是故障快速迭代器。 因此,如果其他线程更改了HashMap的结构(添加或删除了元素),则会抛出concurrentmodificationexception,但在迭代器自己的remove )方法中删除元素时,concurrent modification仍然会保留但是,这不是一定会发生的行为,必须看JVM。 这也是枚举和迭代器的区别。

由于Hashtable是线程安全的、已同步的,因此在单线程环境中比HashMap慢。 如果不需要同步,而只需要单个线程,则使用HashMap比Hashtable提供更好的性能。

HashMap并不保证随着时间的推移,Map内的元素顺序一定。

13、什么是线程安全? 线程不安全是什么?

线程安全是多线程访问,它采用一种锁定机制,在一个线程访问该类中的某个数据时对其进行保护,使其他线程在读完之前无法访问。 不会发生数据不一致或数据污染。 (向量,HashTable )

线程不安全意味着不提供数据访问保护,并且多个线程相继改变数据,从而获得的数据可能是脏数据。 (ArrayList、链接列表、HashMap等)

14、线程与进程的区别?

进程和线程都是时间段的描述,CPU的工作时间段的描述,但粒子大小不同

)1)进程是资源分配和调度的独立单元,线程是CPU调度的基本单元

)2)同一进程可以包含多个线程,线程共享整个进程的资源(寄存器、堆栈、上下文),并且在一个进程中包含至少一个线程。

)3)进程的创建调用fork或vfork,线程的创建调用pthread_create,该进程终止时将放弃所有拥有的线程,线程的终止影响同一进程中的其他线程的终止

)4)线程是一个轻两个阶段的进程,创建和销毁线程所需的时间比进程小很多,所有操作系统的运行功能都是通过创建线程来完成的

)5)在线程上运行时,通常进行同步和互斥。 因为他们共享同一个过程的所有资源

)线程具有自己的专用属性TCB、线程id、寄存器和硬件上下文,进程具有自己的专用属性进程控制块PCB。 这些专用属性不共享,而是标记进程或线程

15、黑盒测试、灰盒测试、白盒测试、单元测试有什么区别?

黑匣子测试关注程序的功能是否正确,面向实际用户;

白盒测试关注程序源代码的内部逻辑结构是否正确,面向程序员

灰盒测试是介于白盒测试和黑盒测试之间的测试。

“单元测试”(Unit Testing )是测试软件的基本组件,包括函数和类的方法。 这里的单元是软件设计的最小单位。

16、如何优化数据库百万级数据?

读写分离技术(

让主数据库(master )处理事务的增加、更改和删除操作(INSERT、UPDATE、DELETE ),并从数据库)处理选择查询操作

17、Spring Bean生命周期:

创建Bean。 BeanFactory读取Bean定义文件并生成每个实例

执行Setter注入、Bean的属性依赖注入

BeanNameAware的setBeanName (),如果实现了接口,请执行setBeanName方法

BeanFactoryAware的setBeanFactory (),如果实现了接口,则执行该setBeanFactory方法

BeanPostProcessor的processBeforeInitialization () (如果存在相关的processor,则此实例的processBeforeInitialization ) )方法使Bean能够

Initializin

gBean的afterPropertiesSet(),如果实现了该接口,则执行其afterPropertiesSet()方法

Bean定义文件中定义init-method

BeanPostProcessors的processAfterInitialization(),如果有关联的processor,则在Bean初始化之前都会执行这个实例的processAfterInitialization()方法

DisposableBean的destroy(),在容器关闭时,如果Bean类实现了该接口,则执行它的destroy()方法

Bean定义文件中定义destroy-method,在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法

简单回答springbean生命周期:

(1)实例化(必须的)构造函数构造对象

(2)装配(可选的)为属性赋值

(3)回调(可选的)(容器-控制类和组件-回调类)

(4)初始化(init-method=" ")

(5)就绪

(6)销毁(destroy-method=" ")

18、springmvc生命周期:

1A)客户端发出http请求,只要请求形式符合web.xml

文件中配置的*.action的话,就由DispatcherServlet

来处理。

1B)DispatcherServlet再将http请求委托给映射器

的对象来将http请求交给对应的Action来处理

2)映射器根据客户的http请求,再对比<bean name="/hello.action

如果匹配正确,再将http请求交给程序员写的Action

3)执行Action中的业务方法,最终返回一个名叫ModelAndView

的对象,其中封装了向视图发送的数据和视图的逻辑名

4)ModelAndView对象随着响应到到DispatcherServlet中了

5)这时DispatcherServlet收到了ModelAndView对象,

它也不知道视图逻辑名是何意,又得委托一个名叫

视图解析器的对象去具体解析ModelAndView对象

中的内容

6)将视图解析器解析后的内容,再次交由DispatcherServlet

核心控制器,这时核心控制器再将请求转发到具体的

视图页面,取出数据,再显示给用户

19、servlet生命周期?

Servlet 通过调用 init () 方法进行初始化。

Servlet 调用 service() 方法来处理客户端的请求。

Servlet 通过调用 destroy() 方法终止(结束)。

最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

20、ajax怎么解决跨域?

参考:http://blog.csdn.net/u014727260/article/details/72793459

① 代理(通过后台操作)

② JSONP(添加响应头,允许跨域 )

addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问

addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式

③ 在ajax的dataType方式改为“jsonp”

21、Mysql数据类型:

① 普通索引

② 唯一索引

③ 主键索引

④ 组合索引

⑤ 全文索引

参考:https://www.cnblogs.com/luyucheng/p/6289714.html

22、Eureka和zookeeper的区别?

① 做分布式下的服务发现还是使用eureka更好,也就是AP特性的分布式协调工具(zookeeper因为网络故障就无法返回可用的主机)

② zookeeper技术更加成熟,资料更多

③ Eureka。是spring cloud之下一个专门负责微服务服务注册和发现的组件,Eureka就是为了服务发现而设计的

④ Zookeeper。是用来保证分布式一致性的一个软件。不是为了服务发现注册而设计的,只不过它的特性也可以被二次开发成服务发现注册中心罢了

23、SpringCloud都有哪些组件?

Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性token,全局一致性锁,leader选举,分布式session,集群状态管理等操作提供了一种简单的开发方式。

组件列:

Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新、加解密配置内容等

Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。

Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

Netflix Eureka:一个基于rest服务的服务治理组件,包括服务注册中心、服务注册与服务发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移。

Netflix Hystrix:容错管理工具,实现断路器模式,通过控制服务的节点,从而对延迟和故障提供更强大的容错能力。

Netflix Ribbon:客户端负载均衡的服务调用组件。

Netflix Feign:基于Ribbon和Hystrix的声明式服务调用组件。

Netflix Zuul:微服务网关,提供动态路由,访问过滤等服务。

Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。

Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。

Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。

Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。

最后

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。

我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。

不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下

Java面试精选题、架构实战文档传送门:点击这里免费领取

ow:大数据操作工具,通过命令行方式操作数据流。

Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。 最后

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。

我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。

不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下

Java面试精选题、架构实战文档传送门:点击这里免费领取

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。