
java
文章平均质量分 84
xfgg
学无止境
展开
-
Spark学习(二)-SparkSQL
安装单机的spark,之前那个太复杂了https://blog.youkuaiyun.com/zhaohaibo_/article/details/84260310SprakSessionSpark有三大引擎,Spark core,SparkSQL,SparkStreamingSpark core的关键抽象是SparkContext,RDD;Spark SQL的关键抽象是SparkSession,DataFrame;SparkStreaming的关键抽象是StreamingContext,DStreamS原创 2021-03-03 18:05:23 · 376 阅读 · 1 评论 -
Scala学习(一)
Scala基础语法Scala与Java的最大区别是:Scala语句末尾的分号是可选的我们可以认为Scala程序是对象的集合,通过调用彼此的方法来实现消息传递,理解类,对象,方法,实例变量的概念对象:对象有属性和行为,对象是一个类的实例类:类是对象的抽象,而对象是类的具体实例方法:方法描述的基本的行为,一个类可以包含多个方法字段:每个对象都有它唯一的实例变量集合,即字段,对象的属性通过给字段赋值来创建交互式编程脚本形式创建一个HelloWorld.scala的文件来执行代码objec原创 2021-03-02 18:14:19 · 2562 阅读 · 0 评论 -
广告行业的学习
什么是程序化广告利用技术手段进行广告交易和管理的一种广告形态,广告主可以程序化采购媒体资源,并利用算法和技术自动实现精准的目标受众定向,只把广告投放给对的人,媒体可以程序化售卖跨媒体,跨终端(电脑,手机,平板,互联网电视等)的媒体资源,并利用技术实现广告流量的分级,进行差异化定价(如一线城市的价格高于二三线城市,黄金时段的价格高于其他时间段),因此程序化广告可以定义为:(1)以人为本的精准广告定向(2)媒体资源的自动化,数字化售卖与采购程序化广告自动化流程媒体先是将流量的展示资源发送到SSP(供应原创 2021-02-26 18:01:05 · 813 阅读 · 0 评论 -
Redis构建频次访问控制器(二)
前言在昨天的基础上新增了功能当访问广告服务时会自动将频次加1,当大于等于规定的频次返回失败页面,还有定时任务,并且使用了SpringCloud分布式的操作话不多说,直接上代码redis_filter(服务提供者)项目结构这个就是昨天的代码改的改动的代码AdShowController@RestControllerpublic class AdShowController { @Autowired private RedisFilterService filterServ原创 2021-02-25 17:28:52 · 219 阅读 · 0 评论 -
Redis构建频次访问控制器(一)
Redis频次访问控制器设计思路频次控制旨在控制某个用户接触到某个广告的次数,以达到提高广告性价比的目的,一般来说,随着某个用户看到同一个广告频次的逐渐上升,点击率呈逐渐下降的趋势,因此在按照CPM采买流量时,广告主有时会要求根据品次控制某个用户接触到某次广告的次数首先,使用redis的hash类型来构建用户,广告,频次访问限制其次,使用用户+广告id为key,来构建用户对某广告的访问频次统计# HMSET userID adID reqFrequency,使用HMSET构建用户,广告和访问频原创 2021-02-24 16:20:12 · 396 阅读 · 0 评论 -
SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)
1. 缓存、两级缓存1.1 内容说明Spring cache:主要包含spring cache定义的接口方法说明和注解中的属性说明springboot+spring cache:rediscache实现中的缺陷caffeine简介spring boot+spring cache实现两级缓存使用缓存时的流程图1.2 Sping Cachespring cache是spring-context包中提供的基于注解方式使用的缓存组件,定义了一些标准接口,通过实现这些接口,就可以通过在方法上增加注解原创 2021-02-23 17:15:29 · 1614 阅读 · 0 评论 -
Kafka学习(二)
1.Kafka单机实操1.1 引入依赖导入kafka及相关依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> </dependency> <dependency> <g原创 2021-02-23 15:21:17 · 286 阅读 · 0 评论 -
kafka学习(一)
1.Kafka基本概念Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理,既然是消息队列,那么Kafka也就拥有了消息队列相应的特性了消息队列的好处解耦合耦合的状态表示当你实现某个功能的时候,是直接接入当前接口,而利用消息队列,可以将相应的消息发送到消息队列,这样的话,如果接口出了问题,将不会影响到当前的功能。每个分区多个副本的从角色,实时的从Leader中同步数据,保持和Leader数据的同步,Leader发生故障的时候,某个Follower会成为新的L转载 2021-02-23 14:54:29 · 236 阅读 · 0 评论 -
Spark学习(一)
1. 什么是Sparkspark是一个实现快速通用的集群计算平台,用来构建大型的,低延迟的数据分析应用程序,扩展了广泛使用的MapReduce计算模型,高效的支持更多计算模式,包括交互式查询和流处理,spark的一个主要特点是能够在内存中进行计算,及时依赖磁盘进行复杂的运算,Spark依然比MapReduce更加高效2. Spark的四大特性2.1 高效性运行速度提升100倍Apache Spark使用最先进的DAG调度程序,查询优化程序和物理执行引擎,实现批量和流式数据的高性能。2.2 易用性转载 2021-02-22 17:59:18 · 270 阅读 · 0 评论 -
Jedis的使用
之前的日报中有关于jedis和jediscluster对数据的操作https://blog.youkuaiyun.com/qq_42337039/article/details/1137377771. jedis连接redis单机1.1 引入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId>原创 2021-02-22 15:10:45 · 222 阅读 · 0 评论 -
Caffeine缓存和@Cacheable注解
1. Caffeine的基础使用借鉴了https://www.jianshu.com/p/9ee2911476171.1 简介Caffeine是基于Java 8的高性能,接近最佳的缓存工具库。Caffeine使用Google Guava启发的API提供内存缓存。所以它的使用成本较低,跟Guava的API大致一致。它主要有以下几个功能:自动将条目自动加载到缓存中,可以选择同步或异步加载基于频率和新近度超过最大值时基于大小的逐出自上次访问或上次写入以来测得的基于时间的条目到期发生原创 2021-02-22 14:08:45 · 2997 阅读 · 0 评论 -
2021-02-22实习日报
1. Map实现自定义缓存1.1 创建定时器线程池static class FactoryClass implements ThreadFactory{ @Override public Thread newThread(Runnable r) { Thread t = new Thread(r, "SegmentScheduledExecutorThread"); t.setDaemon(true); return t原创 2021-02-22 13:40:00 · 279 阅读 · 1 评论 -
2021-02-20实习日报
1. Builder建造者模式项目中使用到了Builder建造者模式将复杂繁琐的的配置操作整合起来建造者模式由产品,抽象建造者,具体建造者,指挥者等四个要素构成1.1 模式的结构建造者模式的主要角色如下产品角色(product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。具体建造者(Concrete Builder):实现 Builde原创 2021-02-20 18:03:00 · 228 阅读 · 0 评论 -
2021-02-19实习日报
1. Java自定义注解1.1注解定义注解通过@interface关键字进行定义public @interface TestAnnotation{}创建一个名称为TestAnnotation的注解,形式和接口类似,多了个@符号1.2 注解的应用@TestAAnnotationpublic class Test{}创建一个类Test,然后在类定义的地方加上@TestAnnotation注解的使用还需要搭配上元注解1.3 元注解元注解:是一种基本注解,可以应用到其他注解上面元注解原创 2021-02-19 17:33:29 · 326 阅读 · 0 评论 -
2021-02-18实习日报
1. SpringCloud中Feign原理1.1 Feign远程调用的基本流程Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,放回给调用者,Feign远程调用的基本流程可以看到,Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数在应用到请求上,进而转换为真正的Request请求,通过Feign以及JAVA的动态代理机制,使得JAVA的开发人转载 2021-02-18 16:32:25 · 189 阅读 · 0 评论 -
2021-02-10实习日报
HNSW算法理解起来有点困难需要多看几遍才能理解具体的含义参考HNSW算法背景介绍在浩渺的数据长河中做高效率相似性查找一直以来都是让人头疼的问题。比如,我在搜狗app上阅读了一篇文章,推荐系统就应当为我推送与这篇文章最相近的文章,数据库中所有文章是用向量表示的,所以我们要解决的问题就是“找到与这篇文章的向量最相近的几个向量”,然后把这些向量对应的文章推送出去。数据库中的文章千千万,所有用户每秒的请求也是千千万,我们需要又快又准又相对节约资源的办法来解决这个问题。HNSW算法第0层中,是数据集转载 2021-02-10 16:51:41 · 253 阅读 · 0 评论 -
2021-02-09实习日报
Hystrix的配置Hystrix配置参数实例具体配置可以看之前的文章,这里只是对项目中使用到的配置进行理解@Service//线程垄断配置//hystrix配置@DefaultProperties(threadPoolKey = "jedisFuse", //10个核心线程池 threadPoolProperties = {@HystrixProperty(name = "coreSize", value = "10"), //原创 2021-02-09 17:47:24 · 788 阅读 · 0 评论 -
2021-02-08实习日报
@Scheduled注解@Cacheable注解项目中redis的使用Map Stream流的使用原创 2021-02-08 16:58:09 · 241 阅读 · 0 评论 -
2021-02-07实习日报
学习项目中用到的技术Jedis、JedisCluster的使用引入依赖包<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> <type>jar</type> <scope>compile<原创 2021-02-07 17:49:17 · 310 阅读 · 1 评论 -
2021-02-05实习日报
从特征服务项目中学习到的新东西map.computIfAbsentpublic V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)此方法首先判断map中是否存在指定key的值,如果不存在会自动调用mappingFunction(key)计算key的value,然后将key=value放入到map中,如果mappingFunction(key)返回的值为null或抛出异常,则不会有记录存入map原创 2021-02-05 16:42:30 · 249 阅读 · 0 评论 -
2021-02-04实习日报
公司内部服务就不记录在博客中了Java8 StreamStream流是一个来自数据源的元素队列并支持聚合操作Java的Stream并不会存储元素,而是按需计算数据源流的来源,可以是集合,数据,I/0Channel,产生器等generator等聚合操作类似SQL语句一样的操作,比如filter,map,reduce,find,match,sorted等Pipelining:中间操作都会返回流对象本身,这样多个操作可以串联成一个管道,如同流式风格,这样u做可以对操作进行优化,比如延迟执行和短路内转载 2021-02-04 15:17:15 · 201 阅读 · 0 评论 -
2021-02-03实习日报
总结Spring Cloud这里简单的总结一下学过的东西,并查缺补漏看下哪些没有学到Spring Cloud模块的相关介绍Eureka:服务注册中心,用于服务管理。Ribbon:基于客户端的负载均衡组件。Hystrix:容错框架,能够防止服务的雪崩效应。Feign:Web 服务客户端,能够简化 HTTP 接口的调用。Zuul:API 网关,提供路由转发、请求过滤等功能。Config:分布式配置管理。Sleuth:服务跟踪。Stream:构建消息驱动的微服务应用程序的框架。Bus:消息转载 2021-02-03 18:03:43 · 220 阅读 · 0 评论 -
2021-02-02实习日报
kafka的基础架构kafka的基础架构主要存在生产者Producer,Kafka集群Broker,消费者Consumer,注册消息ZookeeperProducer:消息生产者,向kafka中发布消息的角色Consumer:消息消费者,即从Kafka中拉取消息消费的客户端Consumer Group:消费者组,消费者组则是一组中存在多个消费,消费者消费Broker中当前Topic的不同分区中的消息,消费者组之间互不影响,所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者,某一个分区原创 2021-02-02 18:02:24 · 642 阅读 · 0 评论 -
2021-02-01实习日报
SpringBoot集成kafka尝试了三种方式来发送和接收消息依赖文件 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> </dependency> <dependency>原创 2021-02-01 18:05:46 · 149 阅读 · 0 评论 -
2021-01-30实习日报
启动kafka下载并解压kafkatar -xzf kafka_2.13-2.7.0.tgzcd kafka_2.13-2.7.0启动服务运行kafka需要使用Zookeeper,可以使用kafka自带打包和配置好的zookeeperxfgg@xfgg-OptiPlex-3050:~/Downloads/kafka_2.13-2.7.0$ bin/zookeeper-server-start.sh config/zookeeper.properties [2021-01-30 10:05:转载 2021-01-30 15:47:15 · 471 阅读 · 0 评论 -
2021-01-29实习日报
实现Redis缓存查询(出了点问题,已解决)在昨天的服务C上添加一个新的服务dao层String findUsernameById(int id);service接口层String findUsernameById(int id);service实现层 @Override public String findUsernameById(int id) { while(template.opsForList().size("user")>0){原创 2021-01-29 17:35:39 · 315 阅读 · 0 评论 -
2021-01-28实习日报
搭建增删改查服务还是用昨天的注册中心和聚合中心,编写服务C,服务B也需要一些修改数据库搭建了一个简单的user,数据是id,username,password总体结构依赖文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId&g原创 2021-01-28 17:55:42 · 775 阅读 · 0 评论 -
2021-01-27实习日报
搭建监控数据聚合Turbine注册中中心启动项package com.xfgg.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBoo原创 2021-01-27 16:55:59 · 207 阅读 · 0 评论 -
2021-01-26实习日报
Feign整合Hystrix整体结构新建项目导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>原创 2021-01-26 17:51:56 · 289 阅读 · 0 评论 -
2021-01-25实习日报
Hystrix的工作流程构造一个HystrixCommand或HystrixObservableCommand对象,用于封装请求,并在构造方法配置请求被执行需要的参数执行命令,Hystrix提供了四种执行命令的方式判断是否使用缓存响应请求,若启用了缓存,直接使用缓存响应请求。Hystrix支持请求缓存,但需要用户自定义启动;判断熔断器是否打开,如果打开,跳到第8步;判断线程池/队列/信号量是否已满,已满则跳到第8步;执行HystrixObservableCommand.construct()或原创 2021-01-25 17:33:36 · 266 阅读 · 1 评论 -
Spring Security详解
认识Spring Security基于SpringAOP和Servlet过滤器,除了常规的认证和授权外,还提供了ACLs,LDAP,JAAS,CAS等高级特性以满足复杂环境下的安全需求Spring Security的三个核心概念Principle:代表用户的对象Princple(User) 不仅指人类,还包括一切可以用于验证的设备Authority:代表用户的角色Authority(Role),每个用户都应该有一种角色,如管理员或会员Permission:代表授权,复杂的应用环境需要对角色的权限原创 2020-11-10 19:54:12 · 1073 阅读 · 0 评论 -
ModelAndView详解
ModelAndView的构造函数有七个ModelAndView(String viewName):持有View的名称返回,之后View名称被view resolver,也就是实作org.springframework.web.servlet.View接口的实例解析,例如 InternalResourceView或JstlView等等ModelAndView(String viewName,Map model):返回model对象,用Map收集model对象,然后设定给ModelAndView,原创 2020-11-06 14:20:13 · 16463 阅读 · 0 评论 -
SSO单点登录
SSO是在多个应用系统,用户只需登录一次就可以访问所有相互信任的应用系统单点登录的好处用户角度:用户能够做到一次登录多次使用,无需记录多套用户名和密码,省心系统管理员角度:管理员只需维护好一个统一的账号中心就可以了,方便新系统开发角度:新系统开发时只需直接对接统一的账号中心即可,简化开发流程,省时SSO设计与实现用户登录状态的存储与校验常用的web框架对于session的实现都是生成一个SessionId存储在浏览器Cookie中,然后将session内容存储在服务器端内存中,这个 ken转载 2020-11-05 17:29:31 · 176 阅读 · 0 评论 -
Threadlocal详解(ThreadLocal,InheritTableThreadLocal,TransmittableThreadLocal)
参考:https://blog.youkuaiyun.com/upgroup/article/details/107935832主要从四个问题了解1)ThreadLocal可以用来解决什么问题,你工作中或者使用的框架中哪里用到了?2)ThreadLocal解决不了什么问题?怎么办3)InheritThreadLocal解决不了什么问题,怎么办4)阿里的TransmittableThreadLocal是如何解决这个问题的ThreadLocal可以用来解决什么问题一个变量的值想要在线程中传递,比如说分布式调用转载 2020-10-24 15:31:20 · 703 阅读 · 0 评论 -
JVM实操
内存溢出内存溢出的原因:程序在申请内存时,没有足够的内存空间栈溢出:方法死循环递归调用,不断建立线程堆溢出:不断创建对象,分配对象的大小大于堆大小直接内存:JVM分配的本地直接内存大于JVM的限制(可以通过-XX:MaxdirectMemorySize来设置)不设置的话默认和堆内存大小一样方法区溢出:在经常动态生产大量Class的应用中,CGLIb字节码增强,动态语言,大量JSP(JSP第一次运行需要编译成Java类),基于OSGi的应用(同一个类,被不同的加载器加载也会设为不同的类)内存泄露转载 2020-10-23 20:42:03 · 239 阅读 · 0 评论 -
慢查询实操
面试的时候问的多了,实操经验太少了,没有底气,这里具体的做一次数据库中设置MySQL慢查询转载 2020-10-23 19:48:28 · 128 阅读 · 0 评论 -
面试总结
自己写的面试总结,记录一下,有点乱,不建议观看哈Arraylist和Linkedlist的实现和区别一个是数组实现,一个是双向链表实现一个查询快,一个增删快,linkedlist还实现了deque队列,所以可以用来双向队列Arraylist有线程安全版本copyarraylistHashMap:了解其数据结构、hash冲突如何解决(链表和红黑树)、扩容时机、扩容时避免rehash的优化数组+链表+红黑树有四个构造方法:无参数构造方法,指定loadfactor负载因子,初始化容量参数推荐使用,避原创 2020-10-23 16:10:40 · 203 阅读 · 0 评论 -
秋招面经(四)
开头日常自我介绍1.多线程开局线程的创建方式和区别,线程池的参数和好处,threadlocal的父子线程如何共享数据(inheritthreadlocal)2.jvm进阶内存模型,创建对象的过程,新生代老生代垃圾回收和对象分配问题,jvm实操调优(jps,jstack,jdump和一些常用的jvm参数)3.数据库索引的创建,索引什么时候会失效,left join之类的表连接,慢查询,leftjoin造成的全表扫描怎么优化,怎么精确定位是哪个语句导致了所有的慢查询,4.linux常用命令(ps原创 2020-10-23 15:23:56 · 114 阅读 · 0 评论 -
数据库分表和分库的概念和策略
分表的概念和策略对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级甚至是亿级,并且数据库面临着极高的并发访问。采用主从复制(Master-Slave)模式的MySQL架构,只能够对数据库的读进行扩展,而对数据库的写入操作还是集中在Master上,并且单个Master挂载的Slave也不可能无限制多,Slave的数量受到Master能力和负载的限制。因此就需要对数据库的吞吐能力进一步扩展,以满足高并发访问与海量数据存储的需要。对于访问频繁且数据量巨大的单表(百万到千万级别)来说,我们首先需要做的转载 2020-10-10 15:23:48 · 292 阅读 · 0 评论 -
ConcurrentHashMap详解
存储结构ConcurrentHashMap由多个Segment组合,而每一个Segment是一个类似于HashMap的结构,所以每一个HashMap的内部可以进行扩容,但是Segment的个数一旦初始化就不能改变,默认segment的个数是16个,可以认为ConcurrentHashMap默认支持最多16个线程并发初始化通过ConcurrentHashMap的无参构造函数探寻初始化过程 /** * Creates a new, empty map with a default ini转载 2020-10-10 13:46:55 · 1045 阅读 · 0 评论