按序打印
力扣上的一道题,三个线程按照顺序分别打印出来one、tow、three: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950class Foot { private val flag:AtomicInteger = AtomicInteger(0) @Throws(InterruptedException::class) fun first(printFirst: Runnable) { // printFirst.run() outputs "first". Do not change or remove this line. printFirst.run() flag.incrementAndGet() } @Throws(InterruptedException::class) fun second(printSeco...
深入理解多线程之一文读懂锁
什么是锁锁的概念源于生活,每家每户都有一把锁,只有持有钥匙才能打开锁进入房间。对于程序来说,就是防止其他线程进入,先到的线程进入房间锁上门,后到的线程看到上锁了,就在门口排队等待。 为什么需要锁多线程并发的场景下,防止多个线程同时读写某一块内存区域,造成数据的不一致性。 java中的锁首先说明:Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。 java中的锁分为内置锁(synchronized)和显式锁(ReentrantLock),其中内置锁是JVM提供的最便捷的线程同步工具,在代码块或方法声明上添加synchronized关键字即可使用内置锁。使用内置锁能够简化并发模型;随着JVM的升级,几乎不需要修改代码,就可以直接享受JVM在内置锁上的优化成果。既然内置锁已经这么好了,那为什么还需要显式锁呢? synchronized没有等待超时时间,获取不到锁会无限等待; 无法中断,如果我们想外部线程发送中断信号的方式停止当前线程获取锁,不得行; 我们想为锁维持多个等待队列,比如一个生产者队列,一个消费者队列,一边提高锁的效率。 synchronized只...
Android面试
首先复习基础,这儿推荐github上的一个项目: LearningNote 然后就是一些进阶需要掌握的知识 一. Android相关1. mvc mvp mvvm三种架构模式 mvc:业务逻辑、数据、界面分离的一种模式,简单的来说,就是通过controller来操作model层的数据,并且返回给view显示。 activity不是标准的controller,随着界面逻辑交互的复杂度提升,activity类的职责不断增加,变得臃肿。 view和model相互耦合,不利于开发。 mvp:主要是提出了presenter层,作为view和model之间沟通的桥梁。 程序逻辑放在presenter中处理,完全将view和model进行了分离,不允许他们之间沟通。 mvvm:主要是将presenter改为了viewmodel,和mvp类似,不同的是viewmodel跟view和model进行双向绑定。 使用了data binding 2. Android系统结构层次Android系统架构分为5层,从下到上依次为 Linux内核层,硬件抽象层,系统运行库层(Native),应用框...
朝花夕拾之几大基础排序算法
算法从来不是死记硬背,而是要知道它背后需要解决什么样的问题,为什么这样设计, 选择排序其实就是挨个查找最小元素的索引,然后交换之。先看图: 12345678910111213141516template<typename T>void selectionSort(T arr[], int n) { for (int i = 0; i < n; i++) { //寻找在[i,n)之间的最小值的索引 int minIndex = i; for (int j = i+1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } swap(arr[i], arr[minIndex]); }} 插入排序 1234567891011121314template<typename T > void insertSort(T arr[], int n) { ...
朝花夕拾之OSI七层参考模型和TCP/IP五层模型
简述OSI七层模型和TCP/IP五层模型复习这块知识的时候,总是让我回想起大学的时光,大学没有好好学习网络相关的基础知识,觉得这些知识在当时看来没有什么实际的意义,现在工作之后,又回顾这些知识,有一种豁然开朗的感觉。 不知道你们接触网络分层模型的时候,有没有这种疑惑:互联网实现为什么需要分层? 在我读书的时候,老师总是开头就把各个分层的概念给我说了,让我记住就行,考试要考这些。我是个乖宝宝,老师交代的我当然要听啊,所以就死记硬背,考试过后查完成绩,立马就给忘了。 OSI七层模型: OSI七层网络模型称为开发式系统互联网参考模型,是一个逻辑上的定义和规范; 把网络从逻辑上分为七层,每一层都有相应的物理设备 OSI七层网络模型是一种框架式的设计方法,最主要的功能就是帮助不同类型的主机实现数据传输; 最大的优点就是将服务、接口和协议三个概念明确的区分起来,随之而来的问题就是复杂且不实用; 经常使用的是TCP/IP五层模型。 TCP/IP五层模型每一层都呼叫它的下一层提供的网络来完成自己的需求。就像建筑物一样,一层一层堆积,开发者只关注上层应用层,而不用关...
分享三家奇葩的面试经历
今天面了两家公司,最后一家是电话面试,两家公司都要求自带简历,到目前为止,要求自带简历的公司,总体给我的感觉就是差。 芯软科技 项目介绍 挑出你在项目里做的一个模块,谈谈这个模块的整个设计 这个我是真的不知道怎么回答,你说整个项目怎么设计的我还能画个架构图啥的给你瞅瞅,但是你这说到具体的模块设计,我是不知道怎么说 项目并发情况 听你说对linux比较熟,环境搭建过吗,有没有遇到什么问题 搭环境遇到了问题不会百度?还是说这个东西有什么技术难题??现在都是用docker了阿sir nginx你们一般做什么,正向代理一般用来干啥 你会前端啊,说说vue用history打包之后,部署到服务器,nginx需要配置什么 说说你的优点 假如你最近加班很累(你已经很累了,要死了),但是项目比较急,你想请假怎么跟领导沟通。 。。。。我tm直接无语了 15分钟解决战斗 世纪网通 java的序列化和反序列化什么含义 生成的serialVersionUID有什么用 yml文件里有一些属性,怎么获取这些属性 有一个枚举类,有很多value和code,然后yml中的一个属性对应这个c...
SpringCloud之深入理解Feign
微服务中,不同的服务之间相互调用主要有两种方式,一种是RPC方式,另外一种是事件驱动方式,也就是发消息方式。 RPC的方式就是远程函数调用,像RESTFul,gRPC, DUBBO 都是这种方式。它一般是同步的,可以马上得到结果。在实际中,大多数应用都要求立刻得到结果,这时同步方式更有优势,代码也更简单。而feign自然也是基于这种方式来做的。 什么是Feignfeign的github上的介绍: Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign’s first goal was reducing the complexity of binding Denominator uniformly to HTTP APIs regardless of ReSTfulness. 简单的来说,Feign是由Retrofit,JAXRS-2.0和WebSocket启发的一个java的 RESTFUL api请求工具。 Feign的主要目标是将Java Htt...
朝花夕拾之socket的基本使用以及mina框架简单介绍
工欲善其事,必先利其器,从互联网诞生到现在,基本上所有的程序都是网络程序,很少有单机版的程序了。 而网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。我们现在进行网络编程,基本上都是使用已经封装好的框架,毕竟自己实现维护一套网络编程框架,费时费力不说,做出来之后还不一定好用,有那时间多保养保养头发。 Socket简介记得大学学习java的时候,并没有接触网络编程相关的基础知识,一直都是单机版程序,没有见识到网络编程的美妙,所以对socket这个东西既熟悉又陌生。熟悉的原因是在MFC实验课中接触到socket知识的,没错,就是那门古老的开发语言,现在已经销声匿迹了,陌生的原因大概也就不言而喻了。好了,说了那么多,那socket到底是什么呢? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口 。很多同学会把tcp、udp协议和socket搞混,其实Socket只是一种连接模式,不是协议。tcp、udp是两个最基本的协议,很多其它协议都是基于这两个协议。 用socket可以创建tcp连接,也可以创建udp连接,这意味着...
视频开发基础篇
视频开发基础篇在进行视频开发之前,如果你对颜色编码格式不是很熟悉,建议先阅读一下这篇文章:yuv和rgb的相关知识。有一个大概了解之后,在看下面的视频相关的基础知识。 封装格式的辨认很简单,大多数情况下,拓展名就是封装格式的名字。比如一个文件“金刚狼.avi”,那它就是属于avi的封装格式,“钢之炼金术师.Mkv”,那它就属于mkv封装格式, “喜羊羊与灰太狼.rmvb”就是rmvb封装格式。简而言之,视频文件后缀名就是封装格式的名字。不过wmv和rmvb就比较特殊,后面编码器部分再说。封装格式就是酒瓶。酒瓶就不影响酒的口感,同样,封装格式一样不影响视频画质。它只负责把内部的视频轨和音频轨集成在一起,只起到一个文件夹(或者压缩包)的作用,并没有对视频轨和音频轨造成影响。 几种主流媒体格式 AVI(Audio Video Interactive) 比较早的AVI是Microsoft开发的。其含义是Audio Video Interactive,就是把视频和音频编码混合在一起存储。AVI也是最长寿的格式,已存在10余年了,虽然发布过改版(V2.0于1996年发布),但已显老态。AVI...
ffmpeg-编译
记一次编译ffmpeg过程: 环境准备 ubuntu16.04 我是64位,所以还要额外安装32位依赖库 ndk环境 首先去官网下载最新的源码:ffmpeg4.0.2 随便解压到一个目录,先运行一次命令./configure,如果没错可以进行下一步操作,编写脚本 新建一个xxx.sh文件,往里面写入如下内容: 123456789101112131415161718192021222324252627282930313233343536373839#!/bin/bashNDK=/opt/android-ndk-r14b #ndk目录SYSROOT=$NDK/platforms/android-14/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64CPU=armv7-a #需要编译哪种架构的so库PREFIX=$(pwd)/android/$CPUADDI_CFLAGS="-marm"OPTIMIZE_CFLAGS="-mfl...












