
技术总结
天涯问路
独乐乐不如众乐乐~
展开
-
flask 的 jsonify 自动排序问题
背景·Python 在写接口的时候有时需要返回 json 格式的数据给客户端·最简单的方式就是用 flask 的 jsonify,能直接将字典格式化为 json 的形式进行传输例如from flask import jsonify.........def return_success(data): """返回成功信息""" return jsonify(data)通过以上 jsonify 的方式大部分需求是能够搞定的问题引发但是有时候我们要传递的 json 格式可能原创 2021-12-07 16:09:54 · 2608 阅读 · 2 评论 -
集群所有采集通道启动/停止脚本
一、启动 / 停止 项 及 顺序 及 链接启动:hadoop 集群:hdfs 和 yarn zookeeper 集群:zk.sh flume 采集集群:flume1.sh kafka 集群:kfk.sh flume 消费集群:flume2.sh停止:启动的反顺序:5、4、3、2、1二、脚本内容#!/bin/bashcase $1 in"start"){ echo " -------- 启动 hadoop 集群 -------" /opt/module/hadoop原创 2020-09-15 09:48:54 · 240 阅读 · 0 评论 -
Flume 内存优化之 OutOfMemoryError: GC overhead limit exceeded
1.问题描述:启动消费Flume抛出如下异常ERROR hdfs.HDFSEventSink: process failedjava.lang.OutOfMemoryError: GC overhead limit exceeded2.解决方案步骤:(1)在hadoop102 服务器的 /opt/module/flume/conf/flume-env.sh 文件中增加如下配置export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management原创 2020-09-15 09:25:36 · 805 阅读 · 0 评论 -
日志采集、消费 Flume 启动停止脚本
1.在 ~/bin目录下创建脚本:vim /bin/flume.sh#! /bin/bashcase $1 in"start"){ for i in hadoop102 hadoop103 do echo " --------启动 $i 采集flume-------" ssh $i "nohup /opt/module/flume/bin/flume-ng agent --conf-file /opt原创 2020-09-14 14:19:26 · 682 阅读 · 0 评论 -
集群时间同步修改脚本
说明:此脚本仅用于日常做测试时使用1.在 ~/bin/ 目录下创建脚本 dt.sh#!/bin/bashfor i in hadoop102 hadoop103 hadoop104do echo "========== $i ==========" ssh -t $i "sudo date -s $1"done2.修改权限:chmod 777 /bin/dt.sh3.修改所有者:chown lpy:lpy /bin/dt.sh4.使用示例:dt.原创 2020-09-12 15:49:35 · 243 阅读 · 0 评论 -
集群日志生成启动脚本
1.脚本内容 lg.sh#!/bin/bashfor i in hadoop102 hadoop103 do ssh $i "java -classpath /opt/module/log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar com.atguigu.appclient.AppMain $1 $2 >/dev/null 2>&1 &" done2.修改权限:chmod 777 lg.sh3.说原创 2020-09-12 15:12:48 · 402 阅读 · 0 评论 -
Linux 系统黑洞 /dev/null
一、什么是 Linux 系统黑洞? /dev/null 代表 Linux 的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。二、Linux 的输入输出Linux 定义了一个标准输入和两个输出:标准输入0:从键盘获得输入 /proc/self/fd/0 标准输出1:输出到屏幕(即控制台) /proc/self/fd/1 错误输出2:输出到屏幕(即控制台) /proc/self/fd/2三、"黑洞"的使用有时候生成的日志文件没有利用价值,就可以全部丢...原创 2020-09-11 17:13:45 · 1226 阅读 · 0 评论 -
Linux 环境变量及注意事项
一、登陆式 Shell 和 非登陆式 Shell首先要了解,什么是登陆式 Shell 和非登陆式 Shell登陆式 Shell:采用用户名密码登陆,例如:在 Hadoop102 上用 lpy 用户登陆 非登录式 Shell:采用 ssh 登陆,例如:在 hadoop102 上输入命令:ssh hadoop103 登陆 hadoop103二、Linux 环境变量 /etc/profile 文件:用来设置系统环境参数,比如 $PATH. 这里面的环境变量是对系统内所有用户生效。...原创 2020-09-11 15:54:26 · 245 阅读 · 0 评论 -
Hive 数据导入导出方式小结
一、数据导入1.最基本的导入方式:loadload data [ local ] inpath '/opt/module/datas/test.txt' [overwrite] into table student [partition (partcol1=val1,…)];local:从本地导入加上 local ,从 hdfs 导入不用加 overwrite:是否覆盖之前的数据 partition:导入指定分区栗子:a).加载本地文件到 hivehive (default..原创 2020-08-20 17:28:23 · 416 阅读 · 0 评论 -
MySQL笔记小结
一、查询是否有旧版本CentOS6:rpm -qa | grep mysql。对应卸载命令:rpm -e --nodeps mysql-libs CentOS7:rpm -qa|grep mariadb。对应卸载命令:rpm -e --nodeps mariadb-libs 查看当前版本:mysqladmin --version二、检查 /tmp 权限是否是最大,若不是,则执行:ch...原创 2020-08-20 16:18:28 · 178 阅读 · 0 评论 -
请参考文件同步分发脚本 xsync
xsync:#!/bin/bash#1 获取输入参数个数,如果没有参数,直接退出pcount=$#if ((pcount==0)); thenecho no args;exit;fi#2 获取文件名称p1=$1fname=`basename $p1`echo fname=$fname#3 获取上级目录到绝对路径pdir=`cd -P $(dirname $p1); pwd`echo pdir=$pdir#4 获取当前用户名称user=`whoami`#5 循环原创 2020-08-19 11:22:22 · 206 阅读 · 0 评论 -
Spark笔记汇总 — 未完结
一、RDDobject Test { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("Spark").setMaster("local[*]") val sc = new SparkContext(conf) val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 6, 3), 3) //sc.原创 2020-08-20 16:21:35 · 223 阅读 · 0 评论 -
抛开源码谈双亲委派
public class Test { public static void main(String[] args) { System.out.println(Test.class.getClassLoader()); System.out.println(Test.class.getClassLoader().getParent()); System.out.println(Test.class.getClassLoader().getParen.原创 2020-05-15 12:16:09 · 197 阅读 · 0 评论 -
static代码块非必执行
public class TestA { static String a = "aaa"; static { System.out.println("****** static_TestA ******"); }}public class TestB { static final String b = "bbb"; static { System.out.println("****** static_TestB ******").原创 2020-05-14 20:41:53 · 284 阅读 · 0 评论 -
Java强软弱虚
**对引用简单理解:Person p = new Person(); 其中 = 左边是引用,存在栈中; = 号右边是对象,在堆里。引用整体架构图四种引用特点强引用:默认,即使OOM,JVM也不会GC这种引用,除非显示的赋值为 null 软引用:内存够,不收,内存不够,收。通常用在对内存敏感的程序中,例如:高速缓存。 弱引用:只要GC一运行,不管内存够不够,都收......原创 2019-11-28 17:28:18 · 311 阅读 · 0 评论 -
Java死锁浅析
什么是死锁? 死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,若无外力干涉则都无法继续推进。如果系统资源充足,线程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 像上面这种,线程A持有锁A并尝试获取锁B,线程B持有锁B并尝试获取锁A,造成死锁。产生死锁的主要原...原创 2019-11-14 14:36:28 · 371 阅读 · 0 评论 -
Java线程池及面试大坑
实现多线程的方式继承Thread,实现run方法; 实现Runnable接口,实现run方法; 实现callable接口,实现call方法; 线程池线程池是干啥的? 线程池的主要工作是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了规定的最大数,则超出的线程排队等候,等其他线程执行完毕,再从队列中去除任务来执行。...原创 2019-11-13 09:56:52 · 642 阅读 · 0 评论 -
ReentrantLock 精确唤醒线程
Synchronized和ReentrantLock的区别原始构成:synchronized是关键字,属于JVM层面,底层通过monitor对象来完成,wait/notify等方法也依赖于monitor,只有在同步块或方法中才能调用wait/notify等方法;Lock是个类,是api层面的锁。 使用方法:synchronized不需要手动释放锁,当synchronized 代码执行完...原创 2019-11-11 11:22:06 · 1224 阅读 · 0 评论 -
JAVA阻塞队列
阻塞队列有没有好的一面?若队列不得不阻塞,如何管理?ArrayBlockingQueue:由数组结构组成的有界阻塞队列 LinkedBlockingQueue:由链表结构组成的有界阻塞队列(大小默认为Integer.MAX_VALUE——21 4748 3647,太大了,可视为无界) SynchronousQueue:不存储元素的阻塞队列,也即单个元素的队列 PriorityBloc...原创 2019-11-13 10:10:06 · 311 阅读 · 0 评论 -
Semaphore信号量
Semaphore信号量 主要用于两个目的:用于多个共享资源的互斥使用 用于并发线程数的控制假设一个小型停车场有3个车位,此时有五辆车同时开进来,那么必有3辆车抢到车位,而剩下的2辆车需要等待车位public class SemaphoreDemo { public static void main(String[] args) { fi...原创 2019-11-06 14:54:34 · 141 阅读 · 0 评论 -
CyclicBarrier
CyclicBarrier—循环屏障 上一篇CountDownLatch是计数器递减,归 0 后阻塞放开,这篇CyclicBarrier与之相同,也是计数器递减,归 0 后屏障放开。功能差不多,只是表现形式不一样。CyclicBarrier:让一组线程达到一个屏障时被阻塞,直到最后一个线程达到屏障时,屏障才会放开,所有被拦截的线程才能继续执行。核心方法:Cycli...原创 2019-11-06 11:17:53 · 278 阅读 · 0 评论 -
CountDownLatch
Case:假如一个页面要请求的数据很多,需要分开请求各个小模块的数据,只有当所有的请求都完成后,才能执行下一步任务。先写一个白纸一样的代码public class CountDownLatchDemo { public static void main(String[] args) { for (int i = 1; i <= 6; i++) { ...原创 2019-11-06 10:14:56 · 222 阅读 · 0 评论 -
Java锁
一、公平锁和非公平锁公平锁:多个线程按照申请锁的顺序来获取锁。好比生产线,每个商品依次按顺序进行加工。 非公平锁:多个线程获取锁的顺序并不是按照申请的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,有可能造成优先级反转和饥饿现象(后面排队的锁由于长期被更后面的锁加塞而导致一直获取不到锁,就是饥饿现象) 两者区别:公平锁,在并发环境中,每个线程在获取锁时会先查...原创 2019-11-05 13:59:14 · 183 阅读 · 0 评论 -
Java多线程下集合类并发修改异常处理
ArrayList是线程不安全的,因为在他的 add 方法添加元素时,为了保证并发性,没有加锁。public class CollectionTest { public static void main(String[] args) { final List<String> list = new ArrayList<>(); ...原创 2019-11-01 11:01:25 · 615 阅读 · 0 评论 -
Java CAS原理分析
什么是CAS? CAS(Compare and Swap)比较并交换。里面涉及到unSave类和自旋锁。 CAS是一条CPU并发原语,它的功能是判断内存中某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。public class CASTest { public static void main(String[] args) { ...原创 2019-10-28 11:22:32 · 316 阅读 · 0 评论 -
Volatile详解
什么是Volatile? Volatile是Java虚拟机提供的轻量级的同步机制。也可以视为synchronized的简易版。Volatile的三大特性保证可见性 不保证原子性 禁止指令重排什么是可见性? 首先了解一个概念:由于JVM运行程序的实体是线程,每个线程在创建的时候JVM都会为其创建一个各自独立的工作内存,也就是说每个线程都会有...原创 2019-10-24 17:08:28 · 325 阅读 · 0 评论 -
Java设计模式之——单例模式
单例模式定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式主要的关键点: 1.构造函数私有:private; 2.通过一个静态方法或者枚举返回单例类对象; 3.确保单例类的对象有且只有一个,尤其是在多线程环境下; 4.确保单例类对象在反序列化时不会重新构建对象。1.饿汉式,也是最简单的一种书写方法...原创 2019-07-24 09:55:30 · 211 阅读 · 0 评论 -
Android解析字节流数据文件
接着上篇文章所请求生成的字节流数据文件,开始解析。解析byte[]类型的文件,需要有其内部数据的数据格式,下面举个栗子:说明:类型长度 Uint32 为(4BYTES)Uint8 为(1BYTES)typedef struct _tag_DATA_INFO{ Uint32 ID ; //ID--------->4个字节 U...原创 2018-08-10 14:09:19 · 1848 阅读 · 0 评论 -
Android UDP通信获取服务器IP
private void udpSend() { new Thread(new Runnable() { @Override public void run() { try { byte[] bytes = new byte[0]; //我不需要传递数据到服务器,所以写了个空的 ...原创 2018-08-10 14:10:03 · 1835 阅读 · 6 评论 -
Android使用Socket分包下载字节流数据并生成文件
谨以此文记录曾经的硝烟,如果还能给大家带来一丢丢的帮助,那是再好不过的事情。任务要求:1、请求需要下载数据的总大小; 2、使用Socket从服务器分段下载字节流数据(byte[]数据); 3、以byte[]的形式追加保存到.txt文件中。一、请求数据大小这里的Socket、OutputStream、InputS...原创 2018-08-10 11:04:30 · 1749 阅读 · 0 评论 -
Android屏幕适配之动态设置单个控件的宽高比例
前言:这个问题出现在我做平板项目的时候,需要横排显示一张图片以及其他控件,如下图:要求图、文各占一半大小,图片的宽高比例目测是1:2。这种情况不适合把高度写死,因为iPad的屏幕大小差异有些大,高度写死图片hin容易变形,因此我们就需要动态去设置这个图片的宽高。正题:首先我们已知图片宽度是屏幕的一半,所以我们只要获取图片的宽度,然后设置高度为宽度的1/2即可。 img.post(n...原创 2018-06-07 15:16:38 · 1452 阅读 · 1 评论 -
Okhttp+Retrofit请求报错:java.io.EOFException: End of input at line 1 column 1
一、出现问题:我的情况是请求返回的RequestCode=200,明明请求成功,但是不走onResponse方法体,而是走onFailure;二、分析问题:后来发现是因为我设置返回的json数据格式与后台返回的数据格式不匹配导致的;三、进一步发现问题:最后问题定位在:服务器给我返回的数据是空的,什么都没有,我也从网上找到那种用String做返回体也不管用,可能这个body连个String都算不上吧...原创 2018-05-16 09:28:54 · 23182 阅读 · 2 评论 -
AlertDialog.Builder创建的Dialog有黑边
正常使用:AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setView(view); dialog.show(); 这样弹出的dialog会有黑边,就像这样:此时我们只需要在styles里自定义一个style,然后在AndroidManifest.xml里把...原创 2018-05-18 10:56:10 · 670 阅读 · 0 评论 -
Android使用EditText输入浮点型数字设置第一位不能输入小数点并且保留两位小数
最近做一个非常简单的功能是用EditText输入价格,需求是第一位不能输入小数点,并且要保留小数点后两位。起初上网百度了一个方法,但是不够严谨,会crash,所以我在这里把他的方法优化了一下。1.首先,要输入浮点型数字,在xml的EditText里要加上一个属性:android:inputType="numberDecimal";2.然后在该EditText所在的Activity或者F...原创 2017-08-14 09:36:36 · 5717 阅读 · 1 评论 -
Android设计模式之——观察者模式
观察者模式最常用的地方是GUI(图形用户界面)系统、订阅——发布系统。其重要作用就是将观察者和被观察者“解耦”,尽可能的降低两者之间的依赖性。观察者模式定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。它是一种行为型模式,行为型模式主要是描述类或者对象是怎样交互和怎样分配职责的。使用场景关联行为场景,需要注意的是,关联...原创 2019-07-29 12:41:07 · 252 阅读 · 0 评论 -
Activity启动流程宏观概念分析
本文借鉴自两位大神的原创:https://blog.youkuaiyun.com/singwhatiwanna/article/details/18154335 https://blog.youkuaiyun.com/qq_23547831/article/details/51224992这两篇启动流程的总结,个人认为是很...原创 2019-08-07 17:29:15 · 207 阅读 · 0 评论 -
AsyncTask原理分析
单个网络请求更新UI用Handler比较方便,但多个网络请求处理最好使用AsyncTask。核心方法onPreExecute():在主线程中执行。一般在任务执行前做准备工作,比如对 UI 做一些标记。 doInBackground(Params...params):在线程池中执行。在 onPreExecute方法执行后运行,用来执行较为耗时的操作。在执行过程中可以调用publishP...原创 2019-09-27 15:25:30 · 236 阅读 · 0 评论 -
Android多线程编程知识点总结
从Android 3.0开 始,系统要求网络访问必须在子线程中进行,否则会抛出ANR(Application Not Responding);什么是进程?抽象的定义:进程是操作系统结构的基础,是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的基本单位。形象的定义:进程是一个程序的实体,一个应用程序可以看做一个进程,进程是线程的容器。什么是线程?线程是操作系统调...原创 2019-09-27 15:31:54 · 226 阅读 · 0 评论 -
ButterKnife注解原理分析
ButterKnife的优点强大的View绑定和Click事件处理功能,简化繁琐的代码编写 可以支持Adapter中的VIewHolder绑定问题 采用编译时通过注解生成代码,对运行时没有侵入,对比反射方式,效率倍高 代码清晰,可读性强核心技术Java Annotation Processing是java中用于编译时扫描和解析Java注解的工具在Java代码编译成Jav...原创 2019-09-10 17:29:14 · 438 阅读 · 0 评论 -
Retrofit原理分析
Retrofit是OkHttp的一个辅助工具,前者负责网络调度,后者负责网络执行。网络请求的工作本质上是OkHttp完成,而 Retrofit 仅负责网络请求接口的封装。从一开始,Retrofit要提供的就是个Call工作对象。public interface INetApi { @GET("/lpy/api.php") Call<Bean> getBea...原创 2019-09-09 14:47:54 · 297 阅读 · 0 评论