`
uule
  • 浏览: 6357983 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

需学习东西(面试问题) -backup

 
阅读更多

记2017.3.21阿里面试经历,java方向

历年阿里面试题汇总(2017年不断更新中)

阿里电面

 

《JAVA并发编程艺术》面试题 

 

JDK8新特性

http://www.runoob.com/java/java8-new-features.html

http://www.importnew.com/11908.html

 

G1回收器和其他回收器有什么区别?

【有序数组】写一个二分查找法(小米)

写一个二叉树遍历(小米+微博)

左右

中左

后左右

 

写一个链表反转(小米)

TCP与UDP区别 10.10万个整数中找出排序后的前10个数(Top N 问题),及其对应算法复杂度

10万个整数中,每个整数取值[0,99],找出排序后的中间位置的数(中位数)

Top K堆实现

找出某日访问网站次数最多的那K个IP

 

堆排序的算法复杂度

面试官说,大概就这些了。紧接着想要挂电话的样子,我赶紧说,我可以问您几个问题吗?面试官说当然可以。我就问了以我当前的水平能否符合您们的要求?面试官说我觉得你还不错。紧接着问了一下大概等多久才能进入下一场面试,面试官说会尽快安排,可能会再周末。

TCP拥塞机制

手写代码,针对Top k问题

如何做到多个线程访问同一个数组,既要线程安全,同时提高读写效率(我是通过分段锁的思想,说了一下自己的想法),后面还让我手写代码实现。

什么是内存对齐?

常用设计模式的UML图

 

C++内存分为几种类型?(我对C++不熟,就说了JVM中的内存分类)

如何压缩一篇文章?

java类加载过程?(这个我很熟,里面滔滔不绝,然而,得到的回应是:背的倒是挺熟)

Java那些类是final?(除了String,我真的不知道还有哪些),只回答了String,面试官说,还有呢?(回答不出来了。。。)后面查了下,其实Math类也是final,面试官说日期类有很多,但是我回头查了下,还是没查到哪个日期类是final。

 

 

 腾讯面试官问的面试题:

1. 简要描述String、StringBuffer、StringBuilder的区别

2. 描述一下JVM加载CLASS文件的原理机制

3. Char型变量能否存储一个中文字?为什么?

4. JAVA中实现多态有哪些方式?

5. 写出你所知道的java.util.concurrent包中的类,并简述它们的用途和应用场景

6. 简述synchronized和java.util.concurent.locks.Lock的异同点

8. 说说你所知道的查找消耗比较大的SQL方法

9. 一张用户表有1000万条记录,主键为自增ID,从中取10条随机记录,如何实现?简述你的解决方案,可以用伪代码描述。

10. 一个大型网站用一张LOG表来记录用户的操作行为,每天会产生上百万条记录。另有一个调试程序定时清除三天前的数据(比如每天凌晨4点执行),以保障LOG表的数据量不会无限增长,要求写出调度程序的伪代码。

11. 写出Linux里查看进程的命令

12. 在LINUX里,如何查看一个监听端口为8060的进程?

13. 分析日志文件,要求统计出响应时间超过100ms的请求及其个数,写出相应的shell命令,文件内容如下,有三个字段,分别表示请求产生的时间戳、请求、响应时间 

 

同为分布式缓存,为何 Redis 更胜一筹?

服务器最大ops多少

tomcat最大连接数多少

Spring的核心技术

 

关于数据库事务说出你知道的所有

跟面试官聊天,说了很多关于登录验证的技术问题(有些紧张)

把你知道的java的concurrent包的技术全部说出来(volatile、锁重入,LinkedTransferQueue字节追加提高并发度技术,ConcurrentHaspMap结合volatile的happen-before读取优化)

 

redis的配置文件(AOF&&Snapshot&&主从复制)

WebSocket长连接问题

你的并发项目有做过压测吗

object对象的常用方法

你知道的spring组件有哪些?在你的工作中哪些地方用到了这些组件?为什么要用这个组件?需要注意哪些点?"针对具体的组件问具体的问题. 因为你能说出来的组件才是你确实用过的,既然是你用过的组件,那我问你在哪些地方用,你就必须知道,并且用这个组件需要注意的点你也应该知道.否则要么就是你没真正用过, 要么就是你确实用了,但是你没有真正理解这个组件,而只是会机械的用而已.

 

腾讯的笔试通过率还是比较高的,前两轮面试除了基本的自我介绍和项目介绍以外,主要会考察的知识点有Hibernate、mysql数据库、Redis、memcache以及Java的full gc,手撕算法和场景题同样很重要。

 

这里对算法题就不举例了,无非是常见的一些知识。网友提供的场景题示例为:千万用户抢购,如何处理高并发,并且有一个链接,指向前一天抢购成功的用户,如何设计整个系统和数据库。

 

3分钟之内写出来链表逆序的递归算法,我不懂为什么偏要递归,其实题不难,不过他限定了时间,心理就紧张了,最后还是写的有点问题。最后面试官突然对我一笑,说你二面通过了。

 

在面试中,Hashmap、Arraylist、各类排序算法、红黑树、线程、消息队列、分布式、Forward和redirect都是常被问到的概念,每个概念又可以展开无数个问题。其中,蚂蚁金服(上海)会更重视数据库和开源相关技术。

 

 

?0、自我介绍

 

1、介绍做过的项目。

2、HashMap什么情况下发生死链?

3、Java什么时候会发生内存泄漏?

4、Array与ArrayList的区别

5、项目用的什么数据库?

6、那前端怎么异步呢?

7、hashset是如何通过hashmap来实现的?

8、如何解决变量可见性?

9、重载与重写的区别

10、索引是怎么实现的?

 

面试过程:

面试流程:

1、自我介绍

主要是对过往工作经历的介绍。面试官有不懂的地方会发问

2、项目介绍

项目介绍过程中,面试官会详细询问项目具体业务,及自己在项目中承担的角色,及过程中遇到的难点和如何克服

3、技术考核

(2)数据库锁、索引

(3)JAVA多线程

(4)JVM

(5)消息中间件

(6)设计模式

 

 

mysql索引是怎么实现的

数据库建表规范

既然有哈希,为什么要用树

 

 

面试官的问题:

问项目中遇到什么难题,如何克服。

答说了最近遇到的性能调优问题。

 

 

多线程和多进程的区别。

答线程是可执行代码的可分派单元。这个名称来源于“执行的线索”的概念。在基于线程的多任务的环境中,所有进程有至少一个线程,但是它们可以具有多个任务。这意味着单个程序可以并发执行两个或者多个任务。多线程开销较小。

 

1、jvm相关问题,运行时内存分布、gc策略、gc算法、类加载的过程 2、哪些情况下会出现CPU100%?如果出现了你怎么去定位(常用的工具和步骤以及如何分析)?HashMap的不当使用是否会导致cpu100%?为什么? 

3、写一段一定会导致死锁的程序 

4、用数组实现一个阻塞队列 

5、简单实现一个线程池?扩展:带定时任务的线程池如何实现? 

6、NIO的工作原理?Netty NIO的线程模型?什么粘包问题?如何解决?如何自定义协议? 

7、HTTP协议都有哪些内容?程序如何parse的?

 

 

TCP协议怎么保证可靠传输?原理TCP和UDP的区别数组和链...

1.HashMap与ConcurrentHashMap的区别及底层实现原理;2.多线程的实现方式以及比较优劣;3.乐观锁与悲观锁的区别以及使用场景;4.Spring的核心点及其实现方式;5.Hibernate的一级缓存与二级缓存;等等

分段锁的机制

 

 

算法:

 

用javascript写出斐波那契函数。。。

请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出;当有人退出影响到用户的位置排名时需要及时反馈到用户

一个不规则INT数组,找出连续的最大增序子数组

答海量(大于内存)的字符串读入,怎样得到频率最高的那组字符串

 

比如二分查找树,自平衡树(红黑树,AVL树)。在问完这些数据结构的一些基本思想后,就让我手写实现一棵红黑树

问如何找到k个最小的数。

答说了几种算法。

编程题:设有N个人依次围成一圈,从第1个人开始报数,第M个人出列,然后从出列的下一个人开始报数,数到第M个人又出列,...,如此反复到所有的人全部出列为止,设N个人的编号分别为1,2,...,N,打印出出列的顺序,要求用java实现。 

 

 

rpc

画项目架构

zookeeper、hadoop生态圈

如何死循环跟踪揭秘jvm

tcp的三次链接,顺着三次连接又问到了syn攻击,以及防御方法

如何在有限内存下对10GB文本数据排序?

复杂链表的深度复制

如何防止 SQL注入?如何防止用户删除其他用户的信息?表单提交可以跨域么?自己写的接口如何防止被其他人恶意调用?

多线程如何在多个CPU上分布?线程调度算法有哪些?.线程调度和进程调度的区别?

 

一开始就问我项目里,心跳包是怎么设计的,我项目里并没有用心跳,然后只能跟他说没做,问我用【搜】json传输数据有什么不好(我只知道用哪想过有什么不好)。又问了http和socket的区别,两个协议哪个更高效一点,遇到过java内存泄露没有,用过哪些调试java内存工具,java四种引用

 

io复用

多线程、高并发请求服务器的设计模式。对于服务器设计模式,我答了消息队列,感觉应该合面试官的意思。面试官接着问消息队列具体怎么实现,请求太多怎么办。后者我回答了个负载均衡,这个回答其实没有抓到面试官的点,不过面试官就顺着这个问题问了负载均衡的实现,请求怎么调度,有无状态问题。到最后面试官简单总结了一下,负载均衡的调度的话可以通过将数据存储抽象实现无状态。

面试官还对之前问的消息队列请求过多的问题总结了一下,说是通过在请求中记录超时时间戳。另外,前边的syn防御也是通过缩短半链接的超时来解决。感觉面试官给的这些答案都非常的偏实际工程应用。

 

如何构建一个高并发的服务器。我提到可以用epoll以及多线程。面试官接着问为什么要用多线程,而不是单线程。

 

我30的时候,连跳两轮,直接翻了一倍,年龄没你想的那么可怕。可怕的是没有信心以及支持信心的底气。// @风一样的爱好者: 本人就是工资倒挂的程序猿,不是不想跳槽,人过30岁,编码岗位并不是那么好找

 

 

JAVA基础

 

集合类以及集合框架;HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMa

如何将一个Java对象序列化到文件

Java的并发、多线程、线程模型

Java中实现多态的机制是什么

什么是线程池,如何使用?

数据一致性如何保证;Synchronized关键字,类锁,方法锁,重入锁

进程和线程的区别

说说你对Java反射的理解

Java如何调用c、c++语言

你所知道的设计模式有哪些

 

数据结构与算法

堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面)

求1000以内的水仙花数以及40亿以内的水仙花数

最快的排序算法是哪个?给阿里2万多名员工按年龄排序应该选择哪个算法?堆和树的区别;写出快排代码;链表逆序代码

万亿级别的两个URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)

子串包含问题(KMP 算法)写代码实现

 

其他

【搜】死锁的四个必要条件

【搜】常见编码方式;utf-8编码中的中文占几个字节;int型几个字节

实现一个Json解析器(可以通过正则提高速度)

MVC MVP MVVM; 常见的设计模式;写出观察者模式的代码

TCP的3次握手和四次挥手;TCP与UDP的区别

HTTP协议;HTTP1.0与2.0的区别;HTTP报文结构

 

非技术问题

研究比较深入的领域有哪些

对业内信息的关注渠道有哪些

最近都读哪些书

自己最擅长的技术点,最感兴趣的技术领域和技术点

项目中用了哪些开源库,如何避免因为引入开源库而导致的安全性和稳定性问题

 

HR问题

您在前一家公司的离职原因是什么?(划重点,基本都会问到)

讲一件你印象最深的一件事情

介绍一个你影响最深的项目

介绍你最热爱最擅长的专业领域

公司实习最大的收获是什么

与上级意见不一致时,你将怎么办

自己的优点和缺点是什么?并举例说明?

你的学习方法是什么样的?实习项目中遇到的最大困难是什么以及如何解决的

说一件最能证明你能力的事情

针对你你申请的这个职位,你认为你还欠缺什么

 

 

 

一、数据结构与算法基础

 

说一下几种常见的排序算法和分别的复杂度。

用Java写一个冒泡排序算法

描述一下链式存储结构。

如何遍历一棵二叉树?

倒排一个LinkedList。

用Java写一个递归遍历目录下面的所有文件。

 

二、Java基础

接口与抽象类的区别?

Java中的异常有哪几类?分别怎么使用?

常用的集合类有哪些?比如List如何排序?

ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?

内存溢出是怎么回事?请举一个例子?

==和equals的区别?

hashCode方法的作用?

NIO是什么?适用于何种场景?

HashMap实现原理,如何保证HashMap的线程安全?

JVM内存结构,为什么需要GC?

NIO模型,select/epoll的区别,多路复用的原理

Java中一个字符占多少个字节,扩展再问int, long, double占多少字节

创建一个类的实例都有哪些办法?

final/finally/finalize的区别?

Session/Cookie的区别?

String/StringBuffer/StringBuilder的区别,扩展再问他们的实现?

Servlet的生命周期?

如何用Java分配一段连续的1G的内存空间?需要注意些什么?

Java有自己的内存回收机制,但为什么还存在内存泄露的问题呢?

什么是java序列化,如何实现java序列化?(写一个实例)?

String s = new String("abc");创建了几个 String Object?

 

三、JVM

JVM堆的基本结构。

JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?

JVM有哪些常用启动参数可以调整,描述几个?

如何查看JVM的内存使用情况?

Java程序是否会内存溢出,内存泄露情况发生?举几个例子。

你常用的JVM配置和调优参数都有哪些?分别什么作用?

JVM的内存结构?

常用的GC策略,什么时候会触发YGC,什么时候触发FGC?

 

四、多线程/并发

如何创建线程?如何保证线程安全?

如何实现一个线程安全的数据结构

如何避免死锁

Volatile关键字的作用?

HashMap在多线程环境下使用需要注意什么?为什么?

Java程序中启动一个线程是用run()还是start()?

什么是守护线程?有什么用?

什么是死锁?如何避免

线程和进程的差别是什么?

Java里面的Threadlocal是怎样实现的?

ConcurrentHashMap的实现原理是?

sleep和wait区别

notify和notifyAll区别

volatile关键字的作

ThreadLocal的作用与实现

两个线程如何串行执行

上下文切换是什么含义

可以运行时kill掉一个线程吗?

什么是条件锁、读写锁、自旋锁、可重入锁?

线程池ThreadPoolExecutor的实现原理?

 

五、Linux使用与问题分析排查

使用两种命令创建一个文件?

硬链接和软链接的区别?

Linux常用命令有哪些?

怎么看一个Java线程的资源耗用?

Load过高的可能性有哪些?

/etc/hosts文件什么做用?

如何快速的将一个文本中所有“abc”替换为“xyz”?

如何在log文件中搜索找出error的日志?

发现磁盘空间不够,如何快速找出占用空间最大的文件?

Java服务端问题排查(OOM,CPU高,Load高,类冲突)

Java常用问题排查工具及用法(top, iostat, vmstat, sar, tcpdump, jvisualvm, jmap, jconsole)

Thread dump文件如何分析(Runnable,锁,代码栈,操作系统线程ID关联)

如何查看Java应用的线程信息?

 

六、框架使用

描述一下Hibernate的三个状态?

Spring中Bean的生命周期。

SpringMVC或Struts处理请求的流程。

Spring AOP解决了什么问题?怎么实现的?

Spring事务的传播属性是怎么回事?它会影响什么?

Spring中BeanFactory和FactoryBean有什么区别?

Spring框架中IOC的原理是什么?

spring的依赖注入有哪几种方式

struts工作流程

用Spring如何实现一个切面?

Spring 如何实现数据库事务?

Hibernate对一二级缓存的使用,Lazy-Load的理解;

mybatis如何实现批量提交?

 

七、数据库相关

MySQL InnoDB、Mysaim的特点?

乐观锁和悲观锁的区别?

数据库隔离级别是什么?有什么作用?

MySQL主备同步的基本原理。

select * from table t where size > 10 group by size order by size的sql语句执行顺序?

如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署)

SQL什么情况下不会使用索引(不包含,不等于,函数)

一般在什么字段上建索引(过滤数据最多的字段)

如何从一张表中查出name字段不包含“XYZ”的所有行?

MySQL,B+索引实现,行锁实现,SQL优化

Redis,RDB和AOF,如何做高可用、集群

如何解决高并发减库存问题

mysql存储引擎中索引的实现机制;

数据库事务的几种粒度;

行锁,表锁;乐观锁,悲观锁

 

八、网络协议和网络编程

TCP建立连接的过程。

TCP断开连接的过程。

浏览器发生302跳转背后的逻辑?

HTTP协议的交互流程。HTTP和HTTPS的差异,SSL的交互流程?

Rest和Http什么关系? 大家都说Rest很轻量,你对Rest风格如何理解?

TCP的滑动窗口协议有什么用?讲讲原理。

HTTP协议都有哪些方法?

交换机和路由器的区别?

Socket交互的基本流程?

http协议(报文结构,断点续传,多线程下载,什么是长连接)

tcp协议(建连过程,慢启动,滑动窗口,七层模型)

webservice协议(wsdl/soap格式,与rest协议的区别)

NIO的好处,Netty线程模型,什么是零拷贝

 

九、Redis等缓存系统/中间件SQL/一致性Hash等

列举一个常用的Redis客户端的并发模型。

HBase如何实现模糊查询?

列举一个常用的消息中间件,如果消息要保序如何实现?

如何实现一个Hashtable?你的设计如何考虑Hash冲突?如何优化?

分布式缓存,一致性hash

LRU算法,slab分配,如何减少内存碎片

如何解决缓存单机热点问题

什么是布隆过滤器,其实现原理是? False positive指的是?

memcache与redis的区别

zookeeper有什么功能,选举算法如何进行

map/reduce过程,如何用map/reduce实现两个数据源的联合统计

 

十、设计模式与重构

你能举例几个常见的设计模式

你在设计一个工厂的包的时候会遵循哪些原则?

你能列举一个使用了Visitor/Decorator模式的开源项目/库吗?

你在编码时最常用的设计模式有哪些?在什么场景下用?

如何实现一个单例?

代理模式(动态代理)

单例模式(懒汉模式,恶汉模式,并发初始化如何解决,volatile与lock的使用)

 

JDK源码里面都有些什么让你印象深刻的设计模式使用

分享到:
评论

相关推荐

    clickhouse-backup-1.4.5离线rpm安装包适应于centos

    点击house-backup-1.4.5离线RPM安装包适用于CentOS操作系统,为系统管理员提供了方便的备份和恢复解决方案。 RPM(Red Hat Package Manager)是Linux系统中广泛使用的软件包管理器,用于安装、升级、查询和卸载软件...

    clickHouse备份工具1.3.1:clickhouse-backup-linux-amd64.tar.gz

    `clickhouse-backup-linux-amd64.tar.gz` 是一个针对Linux平台的AMD64架构的ClickHouse备份工具,版本为1.3.1。这个压缩包提供了一个方便的解决方案,帮助用户对ClickHouse的数据进行安全备份和恢复,确保数据的完整...

    android-backup-extractor,Android备份提取器.zip

    "android-backup-extractor"是一个专为Android用户设计的开源工具,它允许用户方便地提取和重新打包由ADB (Android Debug Bridge) 的`adb backup`命令创建的备份文件。这个实用程序为开发者和高级用户提供了更深层次...

    fast-backup 2.1.zip

    在这个版本中,fast-backup 2.1修复了2.0版本中的一些已知问题,可能包括备份过程中的连接稳定性问题、文件解析错误、备份速度慢等问题。这些修复不仅提高了软件的性能,还提升了用户的使用体验,确保了备份任务的...

    clickhouse-backup-2.5.16-1.x86-64.rpm

    clickhouse-backup备份安装包,安装该包后,按照其命令进行备份和恢复-参考官网

    wp-db-backup

    《WordPress数据库备份神器:wp-db-backup》 在数字化时代,网站数据的安全至关重要,尤其是对于内容管理系统(CMS)如WordPress的用户来说。WordPress是全球最受欢迎的开源博客平台,其丰富的插件生态系统使得管理...

    percona-backup-mongodb_1.6.1-1-最新版.zip

    percona-backup-mongodb-1.6.1-1.el7.x86_64.rpm、 percona-backup-mongodb-1.6.1-1.el8.x86_64.rpm、 percona-backup-mongodb-1.6.1-x86_64.tar.gz、 percona-backup-mongodb_1.6.1-1.bionic_amd64.deb、 percona-...

    K-Backup网络备份与集中存储操作手册

    ### K-Backup网络备份与集中存储操作手册知识点详解 #### 概述 K-Backup是一款为企业提供高效网络备份和集中存储解决方案的专业软件。通过K-Backup,企业能够为员工提供安全可靠的备份空间,同时简化管理员的工作...

    Laravel开发-laravel-backup

    在Laravel框架中,`laravel-backup`是一个非常实用的包,用于管理和执行应用程序的备份操作。这个包提供了一套完整的解决方案,包括数据库备份、文件系统备份以及备份的存储、监控和恢复功能。让我们深入了解一下`...

    fast-backup 2.0.zip

    路由器交换机配置备份工具fast-backup 2.0是可以在任何Windows系统上运行的网络运维软件,帮助运维人员减少大量重复的交换机等设备的配置下载工作,支持的厂商有华为和华三的网络设备和安全设备。

    tampermonkey-backup-chrome-2023-07-22T13-25-07-417Z

    Tampermonkey V4.9tampermonkey-backup-chrome-2023-07-22T13-25-07-417Z

    clickhouse-backup 备份工具

    clickhouse-backup 备份工具,已使用可行,具体参考地址:http://www.gxcode.top/code 资源名搜索:clickhouse备份

    android-backup-tookit20191223.zip

    "android-backup-tookit20191223.zip" 是一个专为Android开发者设计的工具包,旨在简化Apk备份文件的处理过程。这个工具包通过简洁的API接口,使得开发者能够在自己的应用中轻松实现数据备份功能,提高开发效率。 ...

    Ubuntu使用active-backup模式进行网口绑定.zip

    在Linux系统中,尤其是Ubuntu这样的Debian衍生版,网络接口绑定(Bonding)是一种提高网络连接可靠性和带宽的方法。...通过这种方式,你可以确保即使一个网口出现问题,网络连接也不会中断,从而提升系统的稳定性。

    rdiff-backup-1.2.8-1.el5.rf.x86_64 RPM包

    rdiff-backup-1.2.8RPM安装包

    Laravel开发-laravel-db-backup

    在Laravel框架中,开发数据库备份功能是应用维护...通过合理配置和使用,开发者可以更专注于核心业务逻辑,而无需担心数据丢失的问题。在实际开发中,结合良好的备份策略,可以为你的 Laravel 应用提供强大的数据保护。

    HP存储方案-NAS-SAN-Backup.doc

    HP存储方案-NAS-SAN-Backup是一种综合的存储解决方案,旨在帮助用户解决数据存储和备份问题。该方案涵盖了多方面的内容,包括存储挑战、系统建设目标、惠普的存储理念、SAN 和整合、灾难恢复、备份和恢复等。 存储...

    Laravel开发-laravel-backup-commands

    总结来说,`laravel-backup-commands`是Laravel框架中用于管理和执行备份操作的重要工具。它提供了一套全面的命令行接口,让开发者能够轻松地备份和恢复项目数据,确保了数据的安全性。通过合理的配置和调度,`...

    Veeam-Backup-Replication-v9-安装和使用手册-v2.0.pdf

    Veeam Backup & Replication是一款业界领先的备份和复制软件,它集成了多种功能,为VMware vSphere和Microsoft Hyper-V虚拟环境提供了全面的数据保护。本手册旨在指导用户如何安装和使用Veeam Backup & Replication ...

    Laravel开发-mds-backup

    **Laravel 开发:MDS-Backup - 数据库备份解决方案** 在 Laravel 框架的开发过程中,数据安全是至关重要的。Laravel 提供了一系列工具和功能来帮助开发者管理数据库,其中之一就是 `mds-backup`,这是一个专为 ...

Global site tag (gtag.js) - Google Analytics