首页 文章 精选 留言 我的

精选列表

搜索[小程序·即时通信 IM],共10028篇文章
优秀的个人博客,低调大师

【分布式计算】DFS && BigTable

1.背景 分布式计算的发迹应该是google在2003年发表的三篇paper,分别是GFS、MapReduce、BigTable。其中MapReduce大家都很熟悉了,不懂的同学也可以看看我之前写的文章 【分布式计算】MapReduce的替代者-Parameter Server 为什么google会搞分布式计算这件事儿呢,因为在那个年代每天会产生几个T的日志,但是当时的磁盘只允许存储几百G的文件,07年之前淘宝的所有数据都是用完就删除的,因为没地方存。后来,人们认识到数据是值钱的,所以需要一种存储策略来存储大数据,于是google就用了分布式存储系统。 这里主要介绍下GFS和BigTable。 2.DFS(对应hadoop的HDFS) DFS是一种分布式文件存储系统。常规的文件系统是树状结构存储的,每个文件有一个指针指到磁盘上的某个区域。 早期

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

Android -- Spinner && AutoCompleteTextView

Spinner 下拉选择框 Android给我们提供了一个Spinner控件,这个控件主要就是一个列表,Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器。Spinner是View类得一个子类。 package com.yydcdut.spinnerstudy; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; public class MainActivity extends Activity { private Spinner spinner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner = (Spinner) findViewById(R.id.spiiner); ArrayAdapter<String> adapter = new ArrayAdapter<String>( getApplicationContext(), android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.add("123"); adapter.add("321"); adapter.add("123321"); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinner1 = (Spinner) parent; String content = (String) spinner1.getItemAtPosition(position);// 取得与Spinner关联的列表数据的指定位置的数据 Toast.makeText(getApplicationContext(), "position-->" + position + "内容-->" + content, Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO 自动生成的方法存根 } }); } } 接下来我们通过更换adapter.setDropDownViewResource(android.R.layout.test_list_item);里面的xml参数来看一看弹出的样式,具体可以参考一下:http://hi.baidu.com/ihsauqaxblbdmwq/item/62fa237f935a6a580d0a0780 AutoCompleteTextView public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String[] names = { "z11", "z22", "z33", "a44", "a55" }; AutoCompleteTextView auto = (AutoCompleteTextView) findViewById(R.id.auto); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, names); auto.setAdapter(adapter); } } AutoCompleteTextView是实现动态匹配输入的内容。如google搜索引擎当输入文本时可以根据内容显示匹配的热门信息。 虽然AutoCompleteTextView不是Android的常用控件,但是它的实用性还是很强的,具体的使用可以参考ApiDemos,对于基本的用法,它有很详细的说明。但是这些例子远远无法满足我们的需求,下面讲一下几个例子中没有涉及到的属性。 completionThreshold:它的值决定了你在AutoCompleteTextView至少输入几个字符,它才会具有自动提示的功能。另,默认最多提示20条。 dropDownAnchor:它的值是一个View的ID,指定后,AutoCompleteTextView会在这个View下弹出自动提示。 dropDownSelector:应该是设置自动提示的背景色之类的,没有尝试过,有待进一步考证。 dropDownWidth:设置自动提示列表的宽度。 我是天王盖地虎的分割线 源代码:http://pan.baidu.com/s/1dD1Qx01 spinner学习.zip autocompletetextview学习.zip 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3829539.html,如需转载请自行联系原作者

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

Android -- Drawable &amp;&amp; Bitmap

Bitmap转Drawable Bitmap bm=xxx; BitmapDrawable bd=new BitmapDrawable(bm); 因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。 Drawable转Bitmap Drawable d=xxx; BitmapDrawable bd = (BitmapDrawable) d; Bitmap bm = bd.getBitmap(); 最终bm就是我们需要的Bitmap对象了。 从资源中获取Bitmap public static Bitmap getBitmapFromResources(Activity act, int resId) { Resources res = act.getResources(); return BitmapFactory.decodeResource(res, resId); } byte[] → Bitmap public static Bitmap convertBytes2Bimap(byte[] b) { if (b.length == 0) { return null; } return BitmapFactory.decodeByteArray(b, 0, b.length); } Bitmap → byte[] public static byte[] convertBitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); } Drawable → Bitmap public static Bitmap convertDrawable2BitmapByCanvas(Drawable drawable) { Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(),drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); // canvas.setBitmap(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; } 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4080147.html,如需转载请自行联系原作者

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

TextView&amp;amp;EditText

super.onCreate(savedInstanceState);将布局xml文件引入到activity当中setContentView(R.layout.main_activity); 将布局文件与当前文件关联 wrap_content:包裹实际文本内容 match_parent:当前控件铺满父类容器:2.3api之后添加的一个属性值 fill_parent:当前控件铺满父类容器:在2.3api之前的一个属性 附代码: <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名:" android:textSize="28sp" //文本大小经常用SP设置 android:textColor="#000000"/> <EditText android:hint="请输入你的姓名" android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" > 1. 使用findViewById方法获取一个View对象,参数为控件的id,同时还需要把findViewById返回的View对象强制转换成相应的类型。(TextView)this.findViewById(R.id.bookName)2. 一般情况下,布局属性与对象的setXXX方法一一对应,比如设置字体颜色,在xml中属性是android:textColor,而在Activity中则是setTextColor方法,(tv是TextView对象)tv.setTextColor(Color.RED)3. 设置EditText的android:inputType属性可以限制文本输入类型比如android:inputType="textPassword"为设置输入格式为密码格, android:inputType="phone"为设置输入格式为拨号键盘 <requestFocus /> </EditText>

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

Squid普通代理&amp;&amp;透明代理&amp;&amp;反向代理学习

普通代理 背景 192.168.10.2 Windows Squid CentOS 202.168.10.2 CentOS 配置 Windows VM1网卡配置 Squid服务器 VM1网卡配置 Squid服务器 VM2网卡配置 Server VM2网卡配置 Squid安装 将原先的2000+行的配置文件squid.conf删除,自行建立一个squid.conf文件 自动建立缓存目录,在/var/spool/squid/,查看 Server设置 <html><body><h1>web-200.168.10.2</h1></body></html> 测试 Windows IE浏览器配置代理 查看日志 透明代理 背景 与普通代理相同,割了。 配置 Windows VM1网卡配置 其他不变。 Squid配置 添加iptables规则,把内部的http请求重定向到3128端口 测试 反向代理 背景 配置 Windows VM1网卡配置 Squid 服务器IP配置 WEB Server IP配置 squid.conf配置文件 测试 最后测试速度第一次打开网页火狐Firebug。 第一次之后 总结 普通代理只是个很简单的代理,如果是IT人员的话,知道怎么弄,但是对于非IT人员的话,很麻烦,可能要跟着教程走。所以这个不是很方便。所以就有了透明代理,这样无需在IE上设置便可以直接通过代理上网。至于反向代理,主要是为了提高速度而设置的。就像一个公司里面的员工,都通过这个代理访问出去的,第一个员工访问了腾讯的主页,因为他是全公司的第一个去访问的腾讯,那么网页返回的时间就比较长,同时反向代理把腾讯网页上的一些静态信息保存在自己主机上,那么第二次访问,那些静态的东西,比如图片、FLASH等就直接从反向代理服务器中取就OK了,速度就快了许多,上面的图也可以看出来。 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3532313.html,如需转载请自行联系原作者

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

Android -- Drag&amp;&amp;Drop

Android3.0提供了drag/drop框架,利用此框架可以实现使用拖放手势将一个view拖放到当前布局中的另外一个view中。 实现拖放的步骤 首先,我们先了解一下拖放过程,从官方文档可以知道,整个拖放过程共分为4个步骤,具体如下: 1、 Started:启动拖放,主要是调用被拖放View的startDrag方法。此方法原型为: public final boolean startDrag(ClipData data, View.DragShadowBuilder shadowBuilder, Object myLocalState, int flags) 启动后,系统生成拖放阴影并发送action为ACTION_DRAG_STARTED的拖放事件到当前布局中已经设置了拖放监听的View。 2、 Continuing:保持拖动状态。在此过程中系统可能会发送一个或多个拖动事件给设置了拖放监听器的View,比如ACTION_DRAG_ENTERED、ACTION_DRAG_LOCATION等。 3、 Dropped:用户在目标区域内释放拖动阴影,系统会向设置了拖放监听器的View发送action为ACTION_DROP的事件。 4、 Ended:用户释放了拖动阴影,系统会向设置了拖放监听器的View发送action为ACTION_DRAG_ENDED事件,完成拖放。 拖放过程中关键的接口和类 其次,我们要了解清楚拖放过程中的几个关键的接口和类,主要有OnDragListener、DragEvent、DragShadowBuilder、ClipData、ClipDescription等。 1、OnDragListener:接口,拖放事件监听器。当发生Drag时,回调此接口中的方法。接口中只含有一个方法onDrag,方法原型为: boolean onDrag(View v, DragEvent event) //参数v:设置了监听器的View //参数event:拖放事件的参数,封装了拖放相关的数据 //返回值:true-事件已处理;false事件未处理。 2、DragEvent:拖放事件对象,根据action的不同,包含不同的事件数据。 3、DragShadowBuilder:拖放阴影构造者对象,用于构造拖放阴影。 4、ClipData、ClipDescription:用于拖放的移动数据。 code <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/topContainer" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@null" android:src="@drawable/ic_launcher" /> <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="100dp" android:layout_alignParentBottom="true" android:orientation="vertical" android:background="#cccccc" > <TextView android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff0000" android:textSize="18sp" /> </LinearLayout> </RelativeLayout> 为ImageView绑定长点击事件 imageView.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { //创建移动数据 ClipData.Item item = new ClipData.Item((String) v.getTag()); ClipData data = new ClipData(IMAGEVIEW_TAG, new String[] { ClipDescription.MIMETYPE_TEXT_PLAIN }, item); //调用startDrag方法,第二个参数为创建拖放阴影 v.startDrag(data, new View.DragShadowBuilder(v), null, 0); return true; } }); 为目标View绑定拖拽监听: container.setOnDragListener(new OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { final int action = event.getAction(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: //拖拽开始事件 if (event.getClipDescription().hasMimeType( ClipDescription.MIMETYPE_TEXT_PLAIN)) { return true; } return false; case DragEvent.ACTION_DRAG_ENTERED: //被拖放View进入目标View container.setBackgroundColor(Color.YELLOW); return true; case DragEvent.ACTION_DRAG_LOCATION: return true; case DragEvent.ACTION_DRAG_EXITED: //被拖放View离开目标View container.setBackgroundColor(Color.BLUE); title.setText(""); return true; case DragEvent.ACTION_DROP: //释放拖放阴影,并获取移动数据 ClipData.Item item = event.getClipData().getItemAt(0); String dragData = item.getText().toString(); title.setText(dragData+event.getY()+":"+event.getX()); return true; case DragEvent.ACTION_DRAG_ENDED: //拖放事件完成 return true; default: break; } return false; } }); imageView的位置 topContainer.setOnDragListener(new OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { final int action = event.getAction(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: return true; case DragEvent.ACTION_DRAG_ENTERED: return true; case DragEvent.ACTION_DRAG_LOCATION: return true; case DragEvent.ACTION_DRAG_EXITED: return true; case DragEvent.ACTION_DROP: imageView.setX(event.getX()-imageView.getWidth()/2); imageView.setY(event.getY()-imageView.getHeight()/2); return true; case DragEvent.ACTION_DRAG_ENDED: return true; default: break; } return false; } }); 效果 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4473992.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册