自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Tech in Pieces

Technical blog of Evan Sun

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

原创 HTTP Session和数据库Session有什么不同?

HTTP is based on TCP, and it’s a stateless protocol. 意思就是server side不保存任何关于客户端的状态信息。所以我们就创建了session用来在server side记录客户端状态信息。而hibernate session意思是后端和数据库的一次交互。就是CRUD。Session线程不安全,所以每一次执行一个数据库事务(transaction)我们都需要创建一个session实例。而且使用完之后别忘记关闭。代码示例:<span styl

2022-01-20 06:02:25 2384

原创 面试向:什么是Reentrant Lock?

对于可重入锁,我们目前都知道些什么?我知道这个class implement Lock interface. 是一种比较高级的锁。还是三个核心问题:what is reentrant lock? why would we use it? how to use it?reentrant lock is a class implement the Lock interface, and provides synchroniation to to methods while accessing resou

2022-01-20 06:01:44 410

原创 面试向:ReentrantLock和Synchronized关键字如何选择?

两者都是在使用资源的时候锁住资源 不让其他线程使用 从而获得thread safe特性的。什么时候选择什么呢?Java中 synchronized关键字的使用非常简单。修饰方法 或者代码块。在多线程运行过程中, 线程会去先抢对象的监视器 ,这个监视器是对象独有的,其实就相当于一把钥匙,抢到了,那你就获得了当前代码块儿的执行权。其他没有抢到的线程会进入队列(SynchronizedQueue)当中等待,等待当前线程执行完后,释放锁.。最后当前线程执行完毕后通知出队然后继续重复当前过程.。而ree

2022-01-20 06:00:39 409

原创 面试向:RestController代码示例

@RestController@RequestMapping(value="/api")public class UserRestController { UserService userService; @Autowired public UserRestController(UserService userService) { this.userService = userService; } @RequestMappint(val.

2022-01-20 05:59:52 236

原创 几种缓存更新机制和缓存过期策略

这两个东西是缓存实现的底层原理。虽然我们现在都直接用redis或者memcache等第三方缓存 但是知道这些机制和策略仍然十分重要。三种缓存更新机制:Cache aside: 就是我们常见的 请求-命中/失效-更新。同时更新数据库和缓存read/write through: 先更新缓存 然后缓存负责同步更新数据库write behind caching: 先更新缓存 然后异步更新数据库(不过也会导致数据不consistency的情况)三种缓存数据过期策略:FIFO:最先进来的会被第一个淘汰

2022-01-20 05:59:12 746

原创 函数式编程:匿名函数 lambda表达式 闭包的区别

什么是函数式编程?functional programming: It’s a way of thinking about software construction by creating pure functions.函数是这种编程思想的根本 因此 Lambda expression在其中有很高的地位。为啥要引入这些东西呢?第一个就是简洁。因为匿名函数可以直接在函数内部定义 无需重新在外部定义。第二个是可以捕获变量–这个是什么?lambda和闭包有什么区别呢?lambda是没有名字的函数

2022-01-20 05:58:30 178

原创 公网地址和私网地址有哪些类型?

公网地址是值得在互联网上可以直达的地址。我们自己有一个公网地址 可以让我们访问其他公网 或者被其他公网地址用户访问。这也是为什么被称作“互联网”。私网地址 是指在机构内部用的地址 这些地址有明显的特征。我们看一眼就知道这是私网IP address。我们将所有的IP分为三类 ABC类。每一类中有划出来的一部分的私有地址 和划出来得一部分保留地址。①A类地址。A类地址第一字节为网络地址,其他三个字节为主机地址。A类地址范围为1.0.0.1~127.255.255.254.10.X.X.X是私有地址,(

2022-01-20 05:57:44 9826

原创 RPC和RESTful API有什么关系?如何合理的选用?

之前在这篇文章中说过RPC和HTTP之间有什么关系。面试向:什么是RPC?答案是:没关系。两者不是一个层级的东西。HTTP只是RPC思想的一个可用的协议。但是,REST和RPC是什么关系呢?这两个是一个层级的东西 是两种不同的API架构风格。虽然rest API 是最常见的 但是RPC仍然有很大的用武之地。什么是RPC?RPC 使用客户端-服务器模型。请求服务器(换句话说就是客户端)请求一条消息,该消息由 RPC 转换并发送到另一台服务器。服务器收到请求后将响应发送回客户端。当服务器处理这个调用时

2022-01-20 05:56:03 1246

原创 面试向:How to use bug tracing to debug?

我们知道 很多时候 项目出了问题,找出来到底是哪里出的问题是一个很棘手的事情。所以这就是我们为什么要添加ELK和zipkin service, use log4j去储存打印所有的日志很重要。因为一旦出了问题,我们就知道哪里出了问题。当然,如果底层出了问题,这个时候就会出现级联的问题。这个时候 利用log trace span就很重要了。我们要明确每一个日志的链路。一旦出了问题,就能很快找到问题根源。在微服务架构中,我们用zipkin来做log tracing. 就是涉及到所谓的traceId和span

2022-01-20 05:55:24 121

原创 什么是分布式缓存?原理是什么?

在微服务架构中,分布式是一定需要的。因为我们的服务器是分布式集群,数据库是集群。这回给我们的缓存带来挑战。那么这个时候 我们的缓存也必须要是分布式的吗?还是说也可以只用一个cache server?先不考虑那么多 先考虑一定用分布式缓存。分布式缓存有两种:一种是一JBoss cache为代表的互相通信同步的分布式缓存。他是每台服务器上都部署app和cache。另一种是以memcache为代表的互相不通信的分布式缓存。缓存与应用分离部署,缓存系统部署在一组专门的服务器上,应用程序通过一致性Hash

2021-12-28 05:35:38 1671 1

原创 Redis的两种持久化机制:RDB和AOF

RDB是定时的持久机制(snap–快照机制)。也就是说会在固定的时间段(或者空闲时间段)才做数据统一。所以如果有宕机的情况,那么就会出现数据丢失。AOF是基于日志的持久机制。应用缓存介绍Redis持久化机制:RDB和AOF...

2021-12-28 05:34:19 303

原创 基于Springboot的微服务架构中的缓存应该如何实现?

用Redis首先 add dependencies in pom.xml:然后再application.properties中配置redis:host(IP address of redis server), port(6370), password.然后 我们用@StringRedisTemplate来操作redis.代码:

2021-12-28 05:33:22 1270

原创 分布式系统下使用缓存可能存在的问题及解决方法

缓存击穿。就是有一些缓存在被超高并发访问前恰好失效。导致大量请求涌入数据库。【解决方法 给数据库加锁(用synchronized或者用分布式锁【redis给我们实现好了】) 同一时间只有一个请求去查 然后这个查询结果会被缓存 然后后续请求发现这个请求被缓存了】缓存穿透。故意大量去查询一些不存在的数据。然后因为缓存没有击中 数据库也没有,所以也不会被写道缓存中。然后如果重复请求 那么每次都要从数据库去读。会导致系统负载过大。[解决方法:将查询到的null也写入缓存,并设置较为短暂的过期时间]缓存雪崩:指.

2021-12-28 05:31:59 334

原创 什么是分布式锁?为什么用分布式锁?有哪些常见的分布式锁?

我们为什么需要分布式锁?因为我们的数据库或者是app的server通常有很多个,而我们高并发请求的时候,只用一个锁肯定不行了(比如只加synchronized关键字)所以 面对微服务架构下的并发请求。我们需要分布式锁。【就是说 多个数据库+多个并发的请求,使得我们需要分布式锁。如果只是一个数据库+多个并发请求,只需要用synchronized或者reentrantLock就行了。并发请求才是我们用锁的关键原因。如果没有并发 我们根本用不到锁】常见的分布式锁:基于数据库的分布式锁悲观锁乐观锁【ve

2021-12-28 05:29:04 2154

原创 面试向:How to do Caching in Springboot?

首先我们要明确 Cache到底是在cache什么?cache是缓存HTML页面?还是缓存数据库查询结果?在微服务架构中 缓存又需要有哪些独特的地方需要用到?首先我们先广义的说一下缓存在软件开发中的用处:缓存能够大大加快我们的应用相应的速度。就是相当于空间换时间。缓存的数据一般是:频繁访问的数据,储存耗时的结果,减少磁盘的IO。缓存有这么几个分类:客户端缓存(静态文件:html, css,图片等等)代理服务器缓存:常见的是CDN缓存。服务器缓存:memcache, redis缓存就是指服务器

2021-12-28 05:28:04 107

原创 Redis到底是数据库还是缓存?

缓存也是一种数据库。不过因为其体量比较小,可以放在内存中,所以检索速度非常快。就算不在内存中,因为其储存高频查询结果和小体量,因此检索速度也非常快。因为缓存的本质也是信息条目的储存和取用。所以 比较精确的说法是,Redis是缓存数据库。...

2021-12-28 05:24:07 941

原创 数据库操作隔离级别(isolation level)详解

四个隔离级别:未提交读(read uncommitted)提交读(read committed)重复读(repeatabe read)序列化(seriaizabe)通过一些现象 可以反映隔离级别效果。更新丢失(ost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。非 重复读(nonrepeatabe read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的

2021-12-28 05:23:44 893

原创 面试向:JIRA到底是用来干什么的?

之前看文章,有的说JIRA是用来进行bug tracking.有的说JIRA是用来进行User story分配和管理的。有的说JIRA可以集成Jenkins来进行项目的管理的。所以就去JIRA的官网看了一下JIRA software发现JIRA最初是用来bug tracking的 但是发展到现在 已经是一个很强大的project management tool.我们可以用她来:mange of user cardtestingagile team working(including story

2021-12-28 05:23:08 628

原创 面试向:什么是RPC?

RPC, stands for remote process call(远程过程调用)通俗一点 两台服务器 每个部署一个应用、如果部署在A服务器上的应用A想调用B服务器上部署的服务B的函数,但是两者不在一个内存空间内,如何调用呢?这就带来了RPC。这解决了下面几个问题:如何告诉我们用调用某个特定函数呢?用callID映射客户端如何传递参数给远程函数?把参数序列化和反序列化在网络间传输。网路传输协议:大部分RPC框架用TCP协议,而gRPC则用了Http2.RPC的简要原理:服务消费方(

2021-12-28 05:21:15 1394 1

原创 面试向:when should pessimistic lock chose over optimisitic Lock? what about distributed lock?

Those two things are ideas of locking resources to make it thread safe. It’s not actually “Lock”.Optimisitic lock used in cocurrent request for restAPI and distributed transaction of DB.**乐观锁的优点:**不会存在死锁。而且占用的资源也少,所以响应速度也快(因为我们没有用锁锁住全部 而是按照version来判断 ver

2021-12-20 05:53:45 77

原创 AJax到底是干什么的?

AJAX = Asynchronous JavaScript and XML.AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。AJAX 是一种用于创建快速动态网页的技术。AJAX 通过在后台与服务器进行少量数据交换,使网页实现异步更新。这意味着可以在不重载整个页面的情况下,对网页的某些部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个页面。这不是个老的技术 很多大公司都在用:Google Maps、Gmail、Youtube 和 Faceboo

2021-12-20 05:53:10 604

原创 ThreadFactory, SessionFactory和BeanFactory

这是两个java项目里面用factory design pattern的典型代表。threadFactory: 我们的executor->executorService(threadpool)就使用线程工厂来创建线程池的。SessionFactory: 在Hibernate中 我们有个sessionFactory.当我们需要session用于和数据库CRUD。sessionFactory一般一个项目一个就够了。当我们有多个数据库的时候 需要为每个数据库指定一个sessionFactory. 这个时

2021-12-20 05:52:53 89

原创 面试向:SpringData MongoDB

还是那一套:加spring data mongoDB 的dependencies 在Pom.xml里面。然后config mongoDB by add the configration class:@Configurationpublic class AppConfig { public @Bean MongoClient mongoClient() { return MongoClients.create('mongodb://localhost:27017'); }}what’

2021-12-20 05:50:36 126

原创 面试向:wait()和sleep()到底有什么区别?

They are both related to multithreading.wait() from Object class and sleep() from Thread class.While both of them are idle, wait will release the lock of object but sleep() won’t总结一下:wait()-from Object class-release the lock while waitsleep()-from t

2021-12-20 05:50:00 57

原创 面试向:Callable and Future in Java

我们知道 implement callable使创建线程的一种方法。Future是一个接口 接受callable任务 用来操作异步任务的。Callable object can return the computed result done by thread in contrast to a runnable interface while can only run the thread.it returns a future object which provides methods to mon

2021-12-20 05:49:24 400

原创 How to decouple Relational Databases in Microservice architecture?

Chapter 4. Decomposing the Databasecontinuing use the shared databased. (many be some concurrent problem)continuing use the shared databased but access it with a proxy called entitlements services.3. database as a service interface.Pattern: Shared d

2021-12-20 05:48:46 99

原创 面试向: How to do automate testing in Jenkins?

install Selenium Plugin in Jenkins.and then start it, so this will call the test script we write. and generate report too.the limitations of using Jenkins for test automation:Jenkins, being a community-driven tool has a large number of contributors. Mul

2021-12-20 05:45:44 599

原创 面试向:How to do distributed transactions in MongoDB 4.2?

Distributed transactions, which extend multi-document ACID guarantees from replica sets to sharded clusters, give customers an easier way to address a complete range of use cases by enforcing transactional guarantees across highly scaled, global applicatio

2021-12-20 05:44:51 88

原创 面试向:不同的ThreadPool(线程池)的适用场景

对于需要保证所有提交的任务都要被执行的情况,使用FixedThreadPool(size: fixed, no timeout[will executed all])如果限定只能使用一个线程进行任务处理,使用SingleThreadExecutor(if specifically asked to only use single thread)如果希望提交的任务尽快分配线程执行,使用CachedThreadPool(if we want the submited task get executed as

2021-12-20 05:43:27 236

原创 对CICD Pipeline的深层理解--一个Scrum团队的工作流程

Business analysis做需求分析。将需求转化成user story card.Developer会对story card做分析 和BA,tech leader讨论。然后 developer会在Dev branch进行开发 Pull request。[要自己unit testing, code coverage testing]通过之后 dev 分支被合并到master[integreation test].自动trigger cicd pipeline. 然后代码自动被deploy到te.

2021-12-18 06:03:00 276

原创 面试向:Deploy Process and Types of Environments

five steps of deployment process flow:Planning, development, testing, deploying and monitor.???[testing is testing your changes, deploying is deploying changes to the live environment]Types of environments: (DTSP)[this is all the env for SDLC]Developme

2021-12-18 05:59:52 57

原创 面试向:Kafka和ZooKeeper的关系

我们知道Kafka是用来处理real time streaming data, 是个异步消息系统。Zookeeper是一个service register service.ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.kafka is a m

2021-12-18 05:58:41 557

原创 什么是分布式事务(Distributed transactions)?

first of all, what’s transaction?it a set of SQL statements that follows ACID principles.ACID is the principle of transaction, like SQL.atomiticity: do it or don;t do at allconsistency: data needs to be concurrent after we did the transactionisolation

2021-12-18 05:57:38 383

原创 面试向:API Gateway和Load Balancer到底有什么区别

之前说过 不管是client side discovery service还是sever side discovery service. API gateway一定是要有的。不管这个Load balancer和service registery是不是结合在一起(Ribbon+Eureka, Amazon ELB)。但是这个结论是不是正确的呢?首先 我们知道aws lambda, API gateway和amazon ELB都能integrate with lambda.然后 我们看看API gatew

2021-12-18 05:56:59 1458

原创 面试向:How to config database/databases in microservices?

why do we need to config different databases in micro services?Because all the microservices are loose coupled with each other. so that means when one microservice change something in db, it won’t infect to other microservices.但是我们又不能将DB完全分开 为什么呢?因为这样会造成

2021-12-18 05:56:40 65

原创 Hibernate链接和JDBC链接数据库有什么区别?

Hibernate先检索缓存中的映射对象(即操作对象)而JDBC则是直接操作数据库。Hibernate的底层其实还是JDBC。 所以 如果我们正确的使用JDBC 效率是要比hibernate好的,但是因为我们更适合去操作Object 更符合Java“万物皆对象”的思想。...

2021-12-18 05:56:08 81

原创 Maven依赖中groupId和artifactId的区别

这两个是坐标 为了保证项目的唯一性。想要在一个大项目中找到一个小项目 就必须要根据这两个坐标进行查找。groupId一般是 domain+compnay_name: org.ApacheartifactId一般是 project_name-Module_name: testProject一般来说 管理依赖中(pom.xml)文件 不只有groupId和artifactId 还有version, scope等等。<dependencyManagement> <dependen

2021-12-18 05:55:42 1792

原创 面试向:What if one of the microservices goes down?

讲道理 如果说 你的某个microservice goes down导致了你整个系统的崩溃 那就说明这个系统是single point failure的 很不robust。所以 我们要做的 就是防止这种情况的发生。所以就要怎么办?要搞duplicate服务 用discovery service来管理这些东西 不需要自己费心。而且有的时候也不用把duplicate服务一直闲置。我们可以用round robin算法来进行服务器的调用。这样避免了某个服务器过载而出问题。微服务之间的通信尽量用asynch

2021-12-17 05:58:07 67

原创 面试向:What if a microservice running slow?

slow会带来很多问题 不仅仅会影响这个slow的service 也会影响其他的看起来毫不相干的services.为什么?因为这个threads.每个sever都会有一定数量的threads,用来供大量的request来进行请求。一旦一个request长时间占用这个线程 那么其他的request可以用的threads就少了 也就会意味着等待的时间变长了。而一旦等待时间变长 就很可能会出现这个request 因为迟迟没有拿到结果 而timeout了 所以看起来这个对应的服务好像也出问题了。而对用户来说

2021-12-17 05:57:41 56

原创 面试向:What‘s reactive programming?

it’s the way of programming using asynchronized data streaming.why do we need this?响应式编程提高了代码的抽象层级,所以你可以只关注定义了业务逻辑的那些相互依赖的事件,而非纠缠于大量的实现细节。RP 的代码往往会更加简明。特别是在开发现在这些有着大量与数据事件相关的 UI events 的高互动性 Webapps、手机 apps 的时候,RP 的优势就更加明显。10年前,网页的交互就只是提交一个很长的表单到后端,而在前端

2021-12-17 05:45:25 65

空空如也

空空如也

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

TA关注的人

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