首页 文章 精选 留言 我的

精选列表

搜索[计费相关],共10005篇文章
优秀的个人博客,低调大师

开源硬件相关平台

可见有如下几种,当然树莓派由于直至再用,这里不做补充: 1.UDOO: 4倍树莓派性能+Android/Linux全兼容+Arduino开发,UDOO打造极客个人电脑DIY新高度,为教育、创新行业提供强大支撑。 今天为大家介绍的新奇玩物名叫UDOO,它是一台与此前鼎鼎大名的树梅派功能相似的迷你电脑。UDOO主板内置i.MX6 Freescale处理器和Arduino开发板,可以运行Android和Linux操作系统,而且价格低廉,非常适合教育、创新、IT行业和各路 Geek使用。 UDOO非常适合软件开发和程序设计,简单易用,不需要非常多的背景知识。UDOO将不同的操作系统融合在一起,每个操作系统自身的优势和劣势都可以被用户极好地把握,更好地发挥不同的操作系统的功能。 UDOO属于开源硬件的一部分,搭载ARM i.MX6 Freescale处理器,主板上同时还带有一颗Arduino DUE出品的ARM SAM3X处理器,能够满足Android和Linux操作系统的性能需求。 其尺寸非常小,只有11cm x 8.5m,功耗也低。 目前UDOO迷你电脑正在Kickstarter上募资,可以为消费者提供两种不同配置的主板。消费者可选双核或四核A9处理器(售价分别为99和 129美元),内置1G RAM,支持WiFi网络连接,HDMI、RJ45网口、Mini USB、USB、SATA、Micro SD等接口齐全,支持触摸屏。UDOO可运行Linux版Ubuntu,提供任何编程所需的环境;UDOO也可运行Android 4.0.4 Ice Cream Sandwich操作系统,功能齐全;UDOO搭载的Arduino开发板同样符合Arduino社区的标准。 UDOO为开发者提供灵活的开发环境,可以提供Android、Linux、ArduinoTM、Google ADK开发平台,同时其强大的性能还能参与最新的“物联网”开发。通过更换Micro SD,用户可以在数秒之内切换Android和Linux,非常便捷。 二.香蕉派Banana PI Banana PI M1是为了配合Elastos.org 开源OS推广而推出开源硬件平台,BananaPI M1是一款比树莓派更强悍的双核Android4.2产品。BananaPI 支持 Android系统,,Debian linux系统,Ubuntulinux系统, Raspberry Pi 系统and cubieboard 系统.可以作为媒体播放器,智能路由交换器,中继器,工控机,机顶盒,网络播放器,开发板,个人娱乐学习编程软件等。将协调多CPU形成基于“软件/硬件服务”的家庭云生态环境。Banana Pi 外型类似树莓派,但它性能却比树莓派更加强焊,并且可以运行树莓派image. Banana PI 硬件:硬件基于ARM架构,1Ghz ARM7双核处理器,1GB DDR3内存,千兆以太网口,SATA Socket,流畅运行Android4.2.2。Banana PI M1体积如信用卡大小,轻松运行《雷神之锤三:竞技场》这样的游戏,支持1080P高清视频输出,GPIO兼容Raspberry Pi并直接运行其ROM Image. 硬件接口说明: 外接设备: 香蕉派的官网:www.banana-pi.comwww.sinovoip.com.cn 三.嵌入式物联网软硬件开发平台 OpenFPGAduino OpenFPGAduino 是开源的基于 nodejs 与 FPGA 的嵌入式物联网软硬件开发平台。与Arduino等快速原型开发平台相类似。 不仅提供了基于nodejs网络交互能力特别是用于开发的网络IDE以及类似树莓派的linux软件开发系统方便安装各种linux通用软件,而且通过FPGA提供了可编程的兼容arduino外围接口用于与丰富的物联网传感器进行连接。 技术亮点 1提供了基于云端web的IDE开发环境,能够在任何可以浏览网页的设备完成软件开发工作, 甚至可以在iphone ipad android上进行OpenFpgaDuino的开发,只需要打开网页浏览器,输入开发板的ip地址,就可以在IDE中编写代码了。 2 基于FPGA进行IO扩展,提供了多达,可以实现任意的通信控制逻辑设计。扩展接口能够适应多种外部IO总线与接口模型。所有io口都能够进行任意配置,如果需要,可以将所有IO都作为I2C总线或者全部作为SPI总线使用。同时,能够提供实时控制逻辑设计,将cpu从繁重的IO任务中解放出来,专注于计算与网络服务。 3 所有扩展接口A与B提供了防静电保护,不用担心在触碰开发平台的过程中烧坏IO引脚。 4 完整的Linux系统支持,包括Linux标准库函数以及文件系统,可以像PC Linux一样使用apt-get安装需要的程序,并提供了对通用外设的良好支持。同时与FPGA相结合,将实时处理任务交由FPGA处理,避免了Linux实时处理能力弱的问题。 视频 http://v.youku.com/v_show/id_XOTQ3MjkxNzU2.html?from=y1.7-1.2 http://v.youku.com/v_show/id_XMTU3MTUzNTM4OA==.html?spm=a2hzp.8253869.0.0 http://v.youku.com/v_show/id_XMTg4MjgyMDU4MA==.html?spm=a2hzp.8253869.0.0 https://www.youtube.com/watch?v=jsjrgsI-3QM https://www.youtube.com/watch?v=g4E1hoc72DY 应用场景 智能家居信号汇总处理 物联网中央节点 机器人运动控制 快速原型开发 准备构建环境: Install the docker: https://docs.docker.com/installation/#installation Download the Build environment: sudo docker pull openfpgaduino/openfpgaduino Run the environment and open the shell: sudo docker run --privileged -i -t openfpgaduino/openfpgaduino Pull the view: git clone --recursive https://github.com/OpenFPGAduino/OpenFPGAduino.git 本文转自 念槐聚 博客园博客,原文链接:http://www.cnblogs.com/haochuang/p/6768349.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android笔记:Fragment相关问题

这两天在使用Fragment做播放器里的播放列表和歌词显示两个界面的替换与更新时发现了很多问题,在此记录下问题及解决方法: 1.多个Fragment在replace后(并且都加入了后退栈ft.addToBackStack(null)),通过点击按钮事件移除顶层的fragment(使用remove方法),返回后的fragment的oncreatview方法有执行,但是页面仍然没法自行更新数据,页面空白,UI控件都消失了。 解决:不用remove方法,改用通过popBackStack()方法直接将栈顶的fragment弹出,然后直接恢复到要返回的那个fragment。 1 getSupportFragmentManager().popBackStack(); 2.使用popBackStack()方法后,页面控件恢复了,但是数据并没有同步更新。 解决:这个问题困扰了很久,后来讲replace方法改成了add方法,并且在add之前将原先的fragment隐藏掉hide。这样在点击按钮收回播放列表的fragment后,返回的歌词fragment的显示进度是同步的了。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // 打开播放列表 private void btnClick_playinglist() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment fragment = new PlayingListFragment(); if (isOpenPlayingList) //播放类表是否已打开 { getSupportFragmentManager().popBackStack(); mPlaying_img_openlist.setImageResource(R.drawable.icon_playing_img_openlist); isOpenPlayingList = false ; } else { ft.hide(mFragment); ft.add(R.id.playing_fragment_layout, fragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack( null ); mFragment = fragment; mPlaying_img_openlist.setImageResource(R.drawable.icon_playing_img_openlist_press); isOpenPlayingList = true ; } ft.commit(); } 3.通过按钮点击可以正常弹出顶层的播放列表fragment了,同时歌词界面的fragment仍然同步更新。但是用按钮点击打开播放列表fragment,然后用back键返回,第一次正常,多次后歌词fragment就开始变成空白。将fragment的背景颜色修改成红色,异常界面就是红色。由此可见,通过back键返回的fragment仍然没有恢复和更新。 解决:这个不清楚具体原因,应该是使用back返回键和通过调用popBackStack()方法来移除fragment的机制不一样所导致的。这个找不到具体的解决办法,只能先采用规避方法,通过重写back监听方法,进而调用popBackStack()解决了这个问题。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //重写监听back键按钮 @Override public void onBackPressed() { getSupportFragmentManager().popBackStack(); if (isOpenPlayingList) //判断播放列表是否打开 { mPlaying_img_openlist.setImageResource(R.drawable.icon_playing_img_openlist); isOpenPlayingList = false ; } else { super .onBackPressed(); } } 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1252393,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android定制相关小技巧

1、开机图片: android-logo-mask.png android-logo-shine.png 这两个图片一个在上一个在下 ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/assets/images/android-logo-shine.png ./frameworks/base/core/res/assets/images/android-logo-shine.png 注意:如果源码没有make可以直接更改frameworks里的的图片就可以了 然后直接make否则必须全更改并且不能make只能make firmwar 2、默认开机墙纸的位置: default_wallpaper.jpg ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/res/drawable/default_wallpaper.jpg ./frameworks/base/core/res/res/drawable/default_wallpaper.jpg 注意:这个设置和上面的一样这俩个都不能更改文件名 3、更改PC机器删除硬件的文字kernel中 drivers/usb/gadget/f_mass_storage.c fsg->vendor = "XXXXXXXXXXXXX"; 4、更改卷标: bootable/recovery/etc/init.rc setprop UserVolumeLabel "XXXXXXXXXXXXX" 直接打包 5、修改屏幕锁: (1) frameworks/base/packages/SettingsProvider/res/values/defaults.xml 60000 60000改成想要的时间如果是不锁为-1 (2) frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java private boolean mExternallyEnabled = true; 将其修改成false 这样更改就不会再进入休眠状态了 6、初始化语言: out/target/product/sdkDemo/root/default.prop rkdroid2.1/recovery/default.prop ro.product.locale.language = es_ES ro.product.locale.region = es_ES 不能make直接打包 7、设定初始化主页: package/app/Browser/res/values/String.xml 655行 后面的应该是书签里的 8、设定亮度0~255: frameworks/base/packages/SettingsProvider/res/values/defaults.xml def_screen_brightness-->这个值初始化好像是100多 9、音量: frameworks/base/media/java/android/media/AudioManager.java 数组DEFAULT_STREAM_VOLUME第4个值(最大我设置到30但是还是差2格才到最大--默认是11 建议将数组里的所有的数值都设为最大就OK了) mm frameworks/base 10、设置Google帐户,左上角提示“正在设置RK2818SDK”,要求改成“正在设置W9”: out/target/product/sdkDemo/root 中default.prop文件第13行 ro.product.model=rk2818sdk 改为 ro.product.model=W9 11、录音没有小时显示。要求增加: packages/apps/SoundRecorder/src/com/android/soundrecorder (1)SoundRecorder.java中: private void updateTimerView() 把 String timeStr = String.format(mTimerFormat, time/60, time%60); 改为:long hour=time/3600; String timeStr = String.format(mTimerFormat, hour, (time-hour*3600)/60, time%60); (2) /res/values中strings.xml改为: %02d:%02d:%02d 12、去掉Bluetooth: (主界面->添加文件夹->Bluetooth received) ic_launcher_folder_bluetooth.png(72*72): 在/packages/apps/Bluetooth/res/drawable-hdpi 解决方法:删除/out/target/product/sdkDemo/system/app下的Bluetooth.apk 13、充电锁屏时图片: frameworks/base/core/res/res/drawable-hdpi:ic_lock_idle_charging.png 14、去掉锁屏时显示充电百分比在: frameworks/base/core/res/res/values-zh-rCN中strings.xml 的lockscreen_plugged_in 括号中的内容及括号 !! 15、去掉动态桌面背景选项: packages/wallpapers/Basic 中AndroidManifest.xml的这些,如星系注释掉如下这些: <service< p=""> android:label="@string/wallpaper_galaxy" android:name="com.android.wallpaper.galaxy.GalaxyWallpaper" android:permission="android.permission.BIND_WALLPAPER"> 16、更改版本号: build/core/Makefile 79行 RK_VER := xxx 17、更改界面布局 位置:package/app/Launcher2/res/xml/default_workspace.xml 注意:adb shell 里当你点击任意的一个apk的时候,在后台会输出 I/ActivityManager( 728): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.estrongs.android.pop/.view.FileExplorerActivity bnds=[294,373][393,478] } I/WindowManager( 728): Setting rotation to 1, animFlags=0 看蓝色的部分就可以找到/前是包名/后面是类名-->这个是在default_workspace.xml里面需要用到的 launcher:packageName="com.android.browser" launcher:className="com.android.browser.BrowserActivity" 18、如何将pdf类的文件放到桌面上 客户要求将他们自己制作的pdf帮助文档放置到桌面上使客人可以直接点击就浏览 String urlString = "/system/app/Nvsbl P4Dv2 English Manual.pdf"; Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(urlString)),"application/pdf"); startActivity(intent); finish(); 解释下: 首先将pdf文档放到out/target/product/sdkDemo/system/app下 将固定地址给出urlString,使用Intent intent.setAction(android.content.Intent.ACTION_VIEW);启动View intent.setDataAndType(Uri.fromFile(new File(urlString)),"application/pdf"); application/pdf可以指定别的格式包括音频,视频,图片等等但是没有试过有需要可以试试 注意:这个方法很不到如果只放置一些图片还可以但是如果放置文件比较大那么打包出来的 system.img文件会很大也就是占用本身的系统内存----->所以不推荐使用!

优秀的个人博客,低调大师

linux ubuntu/centos相关收藏

linux 自动启动监控 自动监控重启tomcat脚本 - reed的日志 - 网易博客 自动监控apache服务状态并重启的shell脚本_ly_cyz-ChinaUnix博客 关于shell 判断退出 - Linux环境编程 - ChinaUnix.net - windows上用xmanager2.0去管理linux的使用说明 - || Nova's Skill Blog || - CSDN博客 Linux系统远程Xmanager图形化管理 Windows下用xmanager远程桌面控制Linux_服务器频道_计世网 子猴博客 » Linux:使用ulimit设置文件最大打开数 linux操作系统中 拷贝目录的命令是什么_百度知道 Linux之间复制文件和目录_心灵的触动_百度空间 linux下拷贝整个目录 - 欣的日志 - 网易博客 Linux命令:cp (copy)复制文件或目录 - Linux尚观知识库 尚观IT公开课—IT领域分享,学习,交流的平台 http://www.uplook.cn Linux 杀死进程方法大全(kill,killall) - cigogo的专栏 - 博客频道 - CSDN.NET linux定时任务的设置 - 疯狂 --专注java,开源,架构,项目管理 - BlogJava 32位 与64位编译 - xiao__C的专栏 - 博客频道 - CSDN.NET Shell Linux Shell编程基础 - feisky - 博客园 Linux Shell编程入门 - suyang - 博客园 linux下shell,变量,管道,重定向等基础知识及技巧-huhuwang724116-ChinaUnix博客 Linux Shell变量使用_Linux编程_中国网管联盟bitsCN.com 优秀Unix管理员的七个习惯-CSDN.NET 虚拟机 vmware 常用命令 - herb的日志 - 网易博客 权限 Linux下Apache网站目录读写权限的设置_服务器应用_Linux公社-Linux系统门户网站 Linux下SFTP用户权限设置条件及实现命令_Linux/apache_脚本之家 Linux添加FTP用户并设置权限 - Linux操作系统:Ubuntu_Centos_Debian - 红黑联盟 ip RedHat/CentOS Ubuntu下面的iptables的设置-xueliangfei-ChinaUnix博客 防火墙 iptables常用 - 北极 - ITeye技术网站 保护你的Web服务器 iptables防火墙脚本全解读 - 51CTO.COM iptables 使用 - wangkangluo1 - 博客园 Ubuntu13.04下Iptables设置 | hongwei blog 硬盘磁盘 Linux 系统挂载数据盘(阿里云)_孤独浪子_新浪博客 网络共享nfs CentOS 6.5系统下安装和配置NFS服务 - 服务器之家 固定NFS启动端口便于iptables设置 - 海运的博客 CentOS NFS配置 - 月光疾风 - 博客园 Samba配置文件常用参数详解 - 大浪淘沙 - 51CTO技术博客 Samba共享 - 用Ubuntu Server架设基于独立硬盘的Windows文件共享和FTP服务器_服务器应用_Linux公社-Linux系统门户网站 Samba服务vsFTP服务(四) - FTP服务器 - 次元立方网 - 电脑知识与技术互动交流平台 备份还原 Ubuntu服务器的系统备份实战 - 51CTO.COM ubuntu Ubuntu启动时 SMBus base address uninitialized - upgrade bios or use force_addr=0xadd_David Gabriel_百度空间 解决VirtualBox下CentOS启动时MBus base address uninitialized错误 - Linux - 服务器 - 烈火网 解决VirtualBox下CentOS启动时"MBus base address uninitialized"错误 - Slyar Home 备份恢复 Ubuntu如何备份和恢复系统 - 落花往事的日志 - 网易博客 Ubuntu下备份系统的方法_Linux教程_Linux公社-Linux系统门户网站 分区 Ubuntu Server 12.10安装配置 | 系统运维 Ubuntu Server 12.04 安装教程_百度经验 Linux 分区指南《Ubuntu Server 最佳方案》 - Intlgj的专栏 - 博客频道 - CSDN.NET 个人 Macbuntu - 将你的Ubuntu变成华丽丽的Mac风格! | iPc.me centos centos 6 安装virtualbox - sdomain的专栏 - 博客频道 - CSDN.NET CentOS Linux防火墙配置及关闭 - 像块石头 - 博客园 CentOS 6.4 图文安装教程(有些设置大部分教程没出现过)_系统安装_操作系统_脚本之家 CentOS 6.3 下安装VirtualBox 流程指导 - 资料库 - 存储虚拟化论坛 - Watchstor存储论坛 - 中文企业级存储技术论坛 CentOS 6.5(6.4)安装过程图文教程 - 服务器之家

优秀的个人博客,低调大师

Java面试系列-线程相关(一)

实现多线程的方式 继承Thread类,重写run方法,调用start方法启动线程 实现Runnable接口,重写run方法,调用start方法启动线程 实现Callable接口,重写call方法,并用FutureTask包装,在new Thread中传入FutureTask,然后调用start方法启动线程 使用线程池 保证线程安全的方式 synchronized关键字实现的同步方法或者同步代码块 ReentrantLock等实现的锁机制 volatile关键字实现的变量线程安全 使用AtomicInteger等原子类 使用ConcurrentHashMap等线程安全容器 线程有哪些状态? 五个状态:初始化(New)、可运行(Runnable)、运行中(Running)、阻塞(Blocked)、死亡(Dead)。 线程状态图 线程池的7个参数 publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue,ThreadFactorythreadFactory,RejectedExecutionHandlerhandler) corePoolSize 核心线程数:一直存活的核心线程,不会销毁。 maximumPoolSize 最大线程数:提交一个任务,会先进入工作队列,如果队列无法加入,会创建新线程,然后从工作队列中取出一个任务交给新线程来处理,而刚提交的任务会进入工作队列。如果创建新线程导致线程数量超过最大线程,则会执行拒绝策略。 keepAliveTime 空闲线程存活时间:当线程数大于核心线程数时,空余线程等待新任务的最长时间。 unit 空闲线程存活时间单位 workQueue 工作队列 threadFactory 线程工厂:创建线程使用的工厂,可以用来指定线程名字。 handler 拒绝策略 工作队列:有四种 ArrayBlockingQueue:基于数组的有界阻塞队列,FIFO。 LinkedBlockingQuene:基于链表的无界阻塞队列,FIFO。如果指定长度可以充当有界队列,不指定长度则默认Interger.MAX,相当于是无界的。 SynchronousQuene:不缓存任务的阻塞队列,相当于没有队列。 PriorityBlockingQueue:具有优先级的无界阻塞队列。 拒绝策略:工作队列无法加入新任务,且线程数量达到最大线程数,则采用拒绝策略。也有四种 AbortPolicy:默认策略,直接丢弃任务,并且抛出异常。 CallerRunsPolicy:调用者直接执行拒绝任务的run方法。 DiscardPolicy:直接丢弃任务,啥都不做。 DiscardOldestPolicy:抛弃队列中最早的任务,并将当前任务放入队列。 线程池最多能同时处理多少个任务? 如果工作队列是有界队列,则最多:工作队列长度+最大线程数;如果工作队列是无界队列,则最多是无限个。 Executors工具类有哪几种构造线程池的方法? newFixedThreadPool:创建固定大小的线程池。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。 newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。 newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。 newScheduledThreadPool:创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。 newSingleThreadScheduledExecutor:创建一个单线程的线程池。此线程池支持定时以及周期性执行任务的需求。 JVM中哪些区域线程共享,哪些线程私有? 线程共享:方法区、堆 线程私有:Java栈、本地方法栈、程序计数器 Java到底是引用传递还是值传递 2020-08-07 数据库索引 2020-08-02 事务:不好意思,你被隔离了! 2020-07-23 spring事务咋和新冠病毒一样,还会传染? 2020-07-05 数据是怎么一步一步到服务器的 2020-06-18 本文分享自微信公众号 - pipi蛋(pipidan_fuyun)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

Java NIO文件操作--相关类

Buffer类 CharBuffer charBuffer = CharBuffer.allocate(8); charBuffer.capacity(); charBuffer.limit(); charBuffer.position(); 通过allocate()方法创建的Buffer对象是普通Buffer,ByteBuffer还提供了一个allocateDirect()方法类创建直接Buffer。直接Buffer的创建成本比普通Buffer的创建成本高,但直接Buffer的读取效率高! 也就是说直接Buffer适用于长期生存期的Buffer,而不适用于短生存期的Buffer.并且只有ByteBuffer才提供了allocateDirect()方法。 FileChannel类 FileChannel fileChannelIn = fileInputStream.getChannel(); FileChannel fileChannelOut = fileOutputStream.getChannel(); MappedByteBuffer mappedByteBuffer = fileChannelIn.map(MapMode.READ_ONLY, 0, filein.length()); fileChannelOut.write(mappedByteBuffer); 文件锁FileLock fileChannel = new FileOutputStream("a.txt").getChannel(); FileLock fileLock = fileChannel.tryLock(); Thread.sleep(10000);//文件处理 fileLock.release(); 文件锁:可以有效的阻止多个进程并发修改同一个文件。 lock()试图锁定某个文件,如果无法得到文件锁,程序一直阻塞。 tryLock()尝试锁定某个文件,它将直接返回而不是阻塞,如果获得了文件锁,该方法则返回该文件锁,否则返回null。 lock(long postion, long size, boolean shared)对文件从postion开始,长度为size的内容加锁,该方法是阻塞式的。 tryLock(long postion, long size,boolean shared) 非阻塞式的加锁方法,参数同上。 当参数shared为true时,寿命该锁是一个共享锁,他将允许多个进程来读取文件,但阻止其他进程获得对该文件的排他锁。 当参数为false时,表明该锁是一个排他锁,他将锁住对该文件的读写。程序可以调用FileLock的isShared来判断它获得的锁是否是共享锁。 FileVisitor public static void main(String[] args) throws IOException { Files.walkFileTree(Paths.get("D:\\"),new SimpleFileVisitor<Path>(){ @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { System.out.println("正在访问的路径="+dir); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (file.endsWith("FileVisitorTest.java")) { System.out.println("找到目标文件"); return FileVisitResult.TERMINATE; } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { return super.visitFileFailed(file, exc); } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { System.out.println("访问结束"); return super.postVisitDirectory(dir, exc); } }); } 如示例,可以使用FileVisitor 进行磁盘文件查找。 WatchService public static void main(String[] args) { try { WatchService watchService = FileSystems.getDefault().newWatchService(); Paths.get("D:\\").register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY); while(true){ WatchKey key = watchService.take(); for (WatchEvent<?> event : key.pollEvents()) { System.out.println(event.context()+ "发生了"+event.kind()+"事件"); } boolean vaild = key.reset();//重设WatchKey if (!vaild) {//如果重设失败,退出监听 break; } } } catch (IOException | InterruptedException e) { e.printStackTrace(); } } 使用的是D盘目录进行监听,这个监控文件变化的监听器可以做到对D盘和它的第一级子目录的变化进行监听,对它的子目录内部的变化无法做到监听。 WatchService有3个方法来获取舰艇目录的文件变化事件。 poll():获取下一个WatchKey,如果没有WatchKey发生就立即返回null。 poll(long timeout, TimeUnit unit):尝试等待timeout时间去获取下一个WatchKey。 take() : 获取下一个WatchKey,如果没有WatchKey发生就移植等待。 如果程序需要一直监控,则选择take()方法。如果程序需要监听指定时间,使用poll()方法。 访问文件属性BasicFileAttributeView public static void main(String[] args) { Path testPath = Paths.get(".\\src\\com\\yin\\nio\\AttributeViewTest.java"); BasicFileAttributeView basicView = Files.getFileAttributeView(testPath, BasicFileAttributeView.class); try { BasicFileAttributes basicFileAttributes = basicView.readAttributes(); PrintStr("创建时间:"+new Date(basicFileAttributes.creationTime().toMillis()).toLocaleString()); PrintStr("最后访问时间:"+new Date(basicFileAttributes.lastAccessTime().toMillis()).toLocaleString()); PrintStr("最后修改时间:"+new Date(basicFileAttributes.lastModifiedTime().toMillis()).toLocaleString()); PrintStr("文件大小:"+basicFileAttributes.size()); } catch (IOException e) { e.printStackTrace(); } } private static void PrintStr(String str){ System.out.println(str); } Java NIO2(AIO) JDK1.7 NIO2主要改进了Classic I/O中java.io.File类对文件操作的局限性 NIO2还带来了真正意义上的Asynchronous I/O(异步I/O),具体实现分为文件Asynchronous I/O与网络传输Asynchronous I/O。因此NIO2也称为AIO。 NIO2 在 File 操作方面的升级 Path介绍:URI,FileSystems Paths、Files工具类介绍 WatchService接口:提供了通过应用程序监听操作系统文件变更事件的能力 文件读写 Asynchronous I/O NIO2通过AsynchronousFileChannel提供了异步读写文件的功能。通过AsynchronousFileChannel异步读写文件有CompletionHandler与Future两种方式。 Java 异步 I/O 网络通信实现 NIO2通过引入AsynchronousSocketChannel与AsynchronousServerSocketChannel实现了异步I/O网络通信模型。

优秀的个人博客,低调大师

linux系统相关命令行

一、linux系统简介以及基本概念及操作 (1)ctrl+alt+F1~F6:进行切换 ctrl+alt+F7:返回图形界面 (2)使用Tab键进行:命令补全、补全目录、补全命令参数都是可以的。(当你忘记某些命令的全称时,可以只输入开头的一部分,然后按下Tab键就会补全) (3) ctrl+c:立即停止并恢复到你可控的状态,强行终止当前程序(并不会使终端退出) ctrl+d:键盘输入结束或退出终端 ctrl+s:暂停当前程序,暂停后按下任意键恢复运行 ctrl+a:将光标移至输入行头,相当于Home键 ctrl+e:将光标移至输入行末,相当于End键 ctrl+k:删除从光标所在位置到行末 shift+pgup:将终端显示向上滚动 shift+pgdn:将终端显示向下滚动 (4)恢复之前输入过的命令:↑ (5)你可以使用如下方式来获得某个命令的说明和使用方式的详细介绍: $ man <command_name> 例如:man man;manual pages的缩写:man 二、linux目录结构及文件基本操作 (1)返回上级目录:cd .. 进入你的home目录:cd ~ 使用pwd获取当前路径:pwd (2)linux文件的基本操作: ①新建空白文件eg:touch test 前提是切换到自己的目录下面 ②新建目录:mkdir mydir ③使用cp命令复制一个文件到指定目录:cp test father/son/grandson,复制目录也需要加上-r或者-R ④删除文件eg:rm test,若想删除一些只有读的权限文件,rm会报错,可以使用-f参数强制删除eg:rm -f test ⑤删除目录:也需要加上-r或者-R,eg:rm -r family ⑥移动文件:mv,eg:mv 原目录 目的目录 ⑦重命名文件:mv 旧的文件名 新的文件名 三、文件打包与压缩 (1)tar ①打包:tar -zcvf something.tar something ②解包:tar -zxvf something.tar ③指定路径:-C 参数 (2)zip ①打包:zip something.zip something (目录请加 -r 参数) ②解包:unzip something.zip ③指定路径:-d 参数

优秀的个人博客,低调大师

分布式事务相关问题

分布式事务没有标准答案,只有结合业务场景的解决方案 TCC,XA,JTA,LCN,2PC 1、分布式事务是什么 数据库分库分表之后,保证多个数据库之间的提交和回滚数据的一致性 ,如图,假设一个订单系统,订单数据库和调度数据库是分开的,如何保证订单库和调度库的一致性,就是所谓分布式事务,这里多说一句,单一数据库不存在分布式事务的问题。 2、常用的分布式事务解决方案第一类:XA,JTA,TCC,2PC,这些都是基于两阶段提交的思想 (1)、异步任务,校验数据,对比数据是否正确,通知工作人员,也可以根据代码进行修正是数据(最好实现的方法,但并不是分布式事务的解决方案) (2)、XA只是一个约定协议,不是一个实现,定义了一个协议,两阶段提交的一个协议2PC,实现是其他开源软件的事情(Java,PHP,go,数据库),JTA就是Java中实现分布式事务的一组规范 x/openXA 包含了2PC规范 -> Java阵营根据XA协议,定义了JTA规范-> Atomikos框架进行实现 Java中常用Atomikos在实现,适用场景:一个Java应用实例,操作多个数据库,针对于单体应用,不能用于跨系统之间的协调,如图所示,还是外卖订单的图,如果通过JTA实现,那么就不能跨系统调用,只能是单一系统进行多个数据库的操作 看一下代码中如何使用 此处的数据库连接池,采用了阿里的druid连接池 事务管理交由atomikos进行管理,具体的代码其实百度查有很多例程,此处就不多说了,厂商封装好了atomikos,不仅仅是要求Java实现,还要求数据库支持才行(mysql,oracle,db2)(undo,redo日志),此处我们画一个图来说明一下atomikos的实现原理 第一阶段,准备阶段 第二阶段:提交阶段 优点:数据一致性好 缺点:性能比较低,需要保证两个数据库同时在连接数据库,占用很大的资源。一旦协调员挂掉了,无法进行恢复或者回滚。 互联网项目用这种方法并不多,实在太消耗资源了,占用太多的数据库的链接资源,因为只能是单一系统的应用,限制性很大,分布式事务,更多是应用之间的问题,对此,atomikos提出了一个TCC的解决方案,应用与应用之间的分布式事务 TCC就是Atomikos发出的一篇论文(编程式的分布式事务,需要我们自己写代码来实现) Java应用提供这三个操作接口(通过http/rest方式提供):Try 尝试、Confirm 确认、Concel 取消 每一个都是通过HTTP来实现的,并且中间并不是通过数据库进行回滚数据,而是根据自己的代码进行实现,只需要保证BASE原则就可以,保证最终一致性就可以进行,其实TCC就是一种两阶段提交思想的自己编码实现 就好像是ACID原则那样,参考http://drupalchina.cn/node/1401这边文章 3、MQ(消息队列) 消息队列实现分布式事务的思路: (1)数据一定要投递到MQ(消息队列本身提供确认机制activemq\rabbitmq,rocketmq,kafka...) (2)消息消费的确认机制,消息一定要被正确消费(消息队列ack机制) (3)保障消费处理的幂等性,根据业务逻辑去实现(处理一条消息,就需要保留一条记录,单独一个记录表 ) 4、LCN 开源框架,可以直接到GitHub中学习,目前应用公司不算多

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册