首页 文章 精选 留言 我的

精选列表

搜索[第四期热点征文-C],共10016篇文章
优秀的个人博客,低调大师

Hadoop开发者第四期

全文下载: http://ishare.iask.sina.com.cn/f/14487230.html 目录 mooon 1 海量数据处理平台架构演变 4 计算不均衡问题在Hive中的解决办法 15 Join算子在Hadoop中的实现 20 配置Hive元数据DB为PostgreSQL 32 ZooKeeper权限管理机制 36 ZooKeeper服务器工作原理和流程 39 ZooKeeper实现共享锁 47 Hadoop最佳实践 50 通过Hadoop的API管理Job 54 Hadoop集群的配置调优 60 Hadoop平台的Java规范及经验 63 MapReduce开发经验总结 67 Hadoop中的tar命令的实现 70 Hadoop技术论坛运营数据分享 92

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

【AWS征文】AWS网络演进

我们都知道,对于企业来讲,随着业务的发展和重点不同,对网络的实际需求也是不同的,尤其是对于公有云的网络架构,随着AWS的功能完善和发展,越来越多的网络功能得以实现。本文将结合实际案例讲述如何以及为什么从DX过渡到DX gateway的 DX时期的网络方案 企业上云绝非一蹴而就的事情,这就意味着必然存在着一个本地云与公有云共同存在的时期,这就涉及到了本地IDC与云上IDC的互通问题。因我们启用业务上云的方案较早,当时的 AWS还仅有DX的功能,通过此功能我们可以使用AWS合作伙伴专线将本地IDC与AWS连接起来。具体网络架构如下: DX的出现,使得企业可以通过DX的private VIF或者 public VIF将企业的分支/本地IDC与AWS连接起来。而为了实现高可用性,一般不会仅建立一个DX通道,可能会采用如下冗余方案: 两条不同ISP的专线通过不同DX location或者DX 设备连接到AWS的方案 一条ISP专线,一根Internet+IPsec ***的方案 一条ISP专线,一根SD-WAN线路的方案 两根***线路的方案,(可以是Internet+IPsec ***与SD-WAN的组合)等等而因为对线路的时延可靠性等要求,我们当时选择了第一种方案,如下所示。 DX双专线接入时,双活的实现 因AWS DX功能比较弱,无法通过AWS侧设备实现路由的选路,这就导致我们需要通过远端局点的路由控制来实现主备路径的选择,从而使得两条路径互为备份。 如果要选择ISP A的专线为主用线路,则需要如下配置: 1.在Customer GW A上,从ISP A 的EBGP邻居接收路由时,使用route-map修改local-preference的值,将local-preference设置的大于B线路的,使得IDC本地到AWS时,优选A线路。2.同时,在Customer GW B上向B线路的EBGP邻居发布路由时,使用route-map修改AS-path属性,在AS-path后增加几个as-path,使得AWS侧接收到B线路的路由为非优选路由。3.当然,为了切换便利性,我们可以一次性写两套A、B分别为主用线路时的route-map,通过自动化工具,实现路径的一键切换。 配置参考如下: Customer GW A上: route-policy IN_EBGP_A permit node 10 if-match ip-prefix AWS apply local-preference 200 route-policy OUT_EBGP_A permit node 10 if-match ip-prefix LOCAL_IDC route-policy IN_EBGP_B permit node 10 if-match ip-prefix AWS route-policy OUT_EBGP_B permit node 10 if-match ip-prefix LOCAL_IDC Apply as-path 64512 64512 add Customer GW B上: route-policy IN_EBGP_A permit node 10 if-match ip-prefix AWS route-policy OUT_EBGP_A permit node 10 if-match ip-prefix LOCAL_IDC Apply as-path 64512 64512 add route-policy IN_EBGP_B permit node 10 if-match ip-prefix AWS apply local-preference 200 route-policy OUT_EBGP_B permit node 10 if-match ip-prefix LOCAL_IDC 经过一段时间的运行和实践,发现该方案有很多不足之处。比如,因DX功能限制,从ISP A学到的路由会向ISP B传递,从而导致路由环路或者专线路由条目超限的问题等。在多次踩坑之后,痛定思痛,进行了DX到DX GW的改造。 DX Gateway是什么 先看一下没有DX gateway(以下简称DXGW)之前,如果要互联VPC是什么样的? 有了DXGW之后,又是什么样的呢? 每个DX Gateway都是跨所有公共AWS区域存在的全局对象,这就使得所有AWS区域之间可以通过网关进行所有的通信,大大减少了VIF的数量和BGP会话的数量,同时也简化了网络结构和维护成本。 更更重要的是,多了一个DXGW,相当于在DXGW侧多了一台路由器,路由多了一跳,从ISP A学到的路由再也不会默认向ISP B发布了,一劳永逸的解决了因DX功能限制而导致的路由环路和路由条目超限的问题。 DX Gateway如何实现双路径的选路? 改造为DX GW之后,双路径的主备切换和DX时保持一致,还是要通过企业本地IDC侧CE 上BGP的选路来控制的。配置同:DX双专线接入时,双活的实现。 DX Gateway的限制 当然,如此便利的DXGW也有一些限制条件,并不是任何时候都适用,限制如下: 关联到DXGW的VGW/VPC可以属于不同的区域,但必须属于同一个AWS账户 VPC不能使用重复的IP地址段 一个DXGW最多可关联10个VIF/VGW 关联到同一个DXGW的private VIF之间不能进行数据访问 关联到同一个DXGW的VGW之间不能进行数据访问

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

《阿里云前端技术周刊》第四期

作者:弱冠校对:兆庆 知乎:阿里云中台前端/全栈团队专栏 Github:阿里云前端技术周刊 给我们投稿:传送门 参与交流:传送门 前端速报 本周举行的微软Build 2019 大会上宣布了一系列开发者工具和服务:WSL2、Windows Terminal、量子开发、VS Online 等。更多 使用 VS Code 进行远程开发 更多 Babylon.js 4.0发布: (非常)强大的 WebGL 图形引擎 更多 What's New In DevTools (Chrome 74) 更多 Node 12.2.0 (Current) Released [更多]() 编者推荐 Python - 100天从新手到大师不会一两门后端语言的前端不是好开发,如果你还不知道从哪开始学习,那就来看看这个教程吧 leetcode题解正在准备面试的小伙伴对leetcode可能

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

Android第四期 - 单侧滑动效果

Android的设置或者登陆或者其他的一些主窗体要展示的功能需要用到sliding的效果,下面就叫大家怎么做。直接上代码!! MainActivity部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package net.ting.sliding; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener{ private SlideMenuslideMenu; @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); slideMenu=(SlideMenu)findViewById(R.id.slide_menu); ImageViewmenuImg=(ImageView)findViewById(R.id.title_bar_menu_btn); menuImg.setOnClickListener( this ); } @Override public void onClick(Viewv){ switch (v.getId()){ case R.id.title_bar_menu_btn: if (slideMenu.isMainScreenShowing()){ slideMenu.openMenu(); } else { slideMenu.closeMenu(); } break ; } } } SlideMenu部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 package net.ting.sliding; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.Scroller; public class SlideMenu extends ViewGroup{ public static final int SCREEN_MENU= 0 ; public static final int SCREEN_MAIN= 1 ; private static final int SCREEN_INVALID=- 1 ; private int mCurrentScreen; private int mNextScreen=SCREEN_INVALID; private ScrollermScroller; private VelocityTrackermVelocityTracker; private int mTouchSlop; private float mLastMotionX; private float mLastMotionY; private final static int TOUCH_STATE_REST= 0 ; private final static int TOUCH_STATE_SCROLLING= 1 ; private static final int SNAP_VELOCITY= 1000 ; public int mTouchState=TOUCH_STATE_REST; private boolean mLocked; private boolean mAllowLongPress; public SlideMenu(Contextcontext){ this (context, null , 0 ); } public SlideMenu(Contextcontext,AttributeSetattrs){ this (context,attrs, 0 ); } public SlideMenu(Contextcontext,AttributeSetattrs, int defStyle){ super (context,attrs,defStyle); mScroller= new Scroller(getContext()); mCurrentScreen=SCREEN_MAIN; mTouchSlop=ViewConfiguration.get(getContext()).getScaledTouchSlop(); } @Override protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec){ super .onMeasure(widthMeasureSpec,heightMeasureSpec); measureViews(widthMeasureSpec,heightMeasureSpec); } public void measureViews( int widthMeasureSpec, int heightMeasureSpec){ ViewmenuView=getChildAt( 0 ); menuView.measure(menuView.getLayoutParams().width+menuView.getLeft() +menuView.getRight(),heightMeasureSpec); ViewcontentView=getChildAt( 1 ); contentView.measure(widthMeasureSpec,heightMeasureSpec); } @Override protected void onLayout( boolean changed, int l, int t, int r, int b){ int childCount=getChildCount(); if (childCount!= 2 ){ throw new IllegalStateException( "ThechildCountofSlidingMenumustbe2" ); } ViewmenuView=getChildAt( 0 ); final int width=menuView.getMeasuredWidth(); menuView.layout(-width, 0 , 0 ,menuView.getMeasuredHeight()); ViewcontentView=getChildAt( 1 ); contentView.layout( 0 , 0 ,contentView.getMeasuredWidth(), contentView.getMeasuredHeight()); } @Override protected void onFinishInflate(){ super .onFinishInflate(); Viewchild; for ( int i= 0 ;i<getChildCount();i++){ child=getChildAt(i); child.setFocusable( true ); child.setClickable( true ); } } @Override public boolean onInterceptTouchEvent(MotionEventev){ if (mLocked){ return true ; } final int action=ev.getAction(); if ((action==MotionEvent.ACTION_MOVE) &&(mTouchState!=TOUCH_STATE_REST)){ return true ; } final float x=ev.getX(); final float y=ev.getY(); switch (action){ case MotionEvent.ACTION_MOVE: final int xDiff=( int )Math.abs(x-mLastMotionX); final int yDiff=( int )Math.abs(y-mLastMotionY); final int touchSlop=mTouchSlop; boolean xMoved=xDiff>touchSlop; boolean yMoved=yDiff>touchSlop; if (xMoved||yMoved){ if (xMoved&&(yDiff<xDiff)){ //ScrolliftheusermovedfarenoughalongtheXaxis mTouchState=TOUCH_STATE_SCROLLING; enableChildrenCache(); } //Eitherway,cancelanypendinglongpress if (mAllowLongPress){ mAllowLongPress= false ; //Trycancelingthelongpress.Itcouldalsohavebeen //scheduled //byadistantdescendant,sousethemAllowLongPressflag //toblock //everything final ViewcurrentScreen=getChildAt(mCurrentScreen); currentScreen.cancelLongPress(); } } break ; case MotionEvent.ACTION_DOWN: //Rememberlocationofdowntouch mLastMotionX=x; mLastMotionY=y; mAllowLongPress= true ; mTouchState=mScroller.isFinished()?TOUCH_STATE_REST :TOUCH_STATE_SCROLLING; break ; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: //Releasethedrag clearChildrenCache(); mTouchState=TOUCH_STATE_REST; mAllowLongPress= false ; break ; } /* *Theonlytimewewanttointerceptmotioneventsisifweareinthe *dragmode. */ returnmTouchState!=TOUCH_STATE_REST; } voidenableChildrenCache(){ finalintcount=getChildCount(); for(inti=0;i<count;i++){ finalViewlayout=(View)getChildAt(i); layout.setDrawingCacheEnabled(true); } } voidclearChildrenCache(){ finalintcount=getChildCount(); for(inti=0;i<count;i++){ finalViewlayout=(View)getChildAt(i); layout.setDrawingCacheEnabled(false); } } @Override publicbooleanonTouchEvent(MotionEventev){ if(mLocked){ returntrue; } if(mVelocityTracker==null){ mVelocityTracker=VelocityTracker.obtain(); } mVelocityTracker.addMovement(ev); finalintaction=ev.getAction(); finalfloatx=ev.getX(); switch(action){ caseMotionEvent.ACTION_DOWN: /* *Ifbeingflingedandusertouches,stopthefling.isFinished *willbefalseifbeingflinged. */ if (!mScroller.isFinished()){ mScroller.abortAnimation(); } //Rememberwherethemotioneventstarted mLastMotionX=x; break ; case MotionEvent.ACTION_MOVE: if (mTouchState==TOUCH_STATE_SCROLLING){ //Scrolltofollowthemotionevent final int deltaX=( int )(mLastMotionX-x); mLastMotionX=x; if (deltaX< 0 ){ if (deltaX+getScrollX()>=-getChildAt( 0 ).getWidth()){ scrollBy(deltaX, 0 ); } } else if (deltaX> 0 ){ final int availableToScroll=getChildAt( getChildCount()- 1 ).getRight() -getScrollX()-getWidth(); if (availableToScroll> 0 ){ scrollBy(Math.min(availableToScroll,deltaX), 0 ); } } } break ; case MotionEvent.ACTION_UP: if (mTouchState==TOUCH_STATE_SCROLLING){ final VelocityTrackervelocityTracker=mVelocityTracker; velocityTracker.computeCurrentVelocity( 1000 ); int velocityX=( int )velocityTracker.getXVelocity(); if (velocityX>SNAP_VELOCITY&&mCurrentScreen==SCREEN_MAIN){ //Flinghardenoughtomoveleft snapToScreen(SCREEN_MENU); } else if (velocityX<-SNAP_VELOCITY &&mCurrentScreen==SCREEN_MENU){ //Flinghardenoughtomoveright snapToScreen(SCREEN_MAIN); } else { snapToDestination(); } if (mVelocityTracker!= null ){ mVelocityTracker.recycle(); mVelocityTracker= null ; } } mTouchState=TOUCH_STATE_REST; break ; case MotionEvent.ACTION_CANCEL: mTouchState=TOUCH_STATE_REST; } return true ; } @Override public void computeScroll(){ if (mScroller.computeScrollOffset()){ scrollTo(mScroller.getCurrX(),mScroller.getCurrY()); } else if (mNextScreen!=SCREEN_INVALID){ mCurrentScreen=Math.max( 0 , Math.min(mNextScreen,getChildCount()- 1 )); mNextScreen=SCREEN_INVALID; clearChildrenCache(); } } @Override public void scrollTo( int x, int y){ super .scrollTo(x,y); postInvalidate(); } @Override protected void dispatchDraw(Canvascanvas){ final int scrollX=getScrollX(); super .dispatchDraw(canvas); canvas.translate(scrollX, 0 ); } @Override public boolean dispatchUnhandledMove(Viewfocused, int direction){ if (direction==View.FOCUS_LEFT){ if (getCurrentScreen()> 0 ){ snapToScreen(getCurrentScreen()- 1 ); return true ; } } else if (direction==View.FOCUS_RIGHT){ if (getCurrentScreen()<getChildCount()- 1 ){ snapToScreen(getCurrentScreen()+ 1 ); return true ; } } return super .dispatchUnhandledMove(focused,direction); } protected void snapToScreen( int whichScreen){ enableChildrenCache(); whichScreen=Math.max( 0 ,Math.min(whichScreen,getChildCount()- 1 )); boolean changingScreens=whichScreen!=mCurrentScreen; mNextScreen=whichScreen; ViewfocusedChild=getFocusedChild(); if (focusedChild!= null &&changingScreens &&focusedChild==getChildAt(mCurrentScreen)){ focusedChild.clearFocus(); } final int newX=(whichScreen- 1 )*getChildAt( 0 ).getWidth(); final int delta=newX-getScrollX(); mScroller.startScroll(getScrollX(), 0 ,delta, 0 ,Math.abs(delta)* 2 ); invalidate(); } protected void snapToDestination(){ if (getScrollX()== 0 ){ return ; } final int screenWidth=getChildAt( 0 ).getWidth(); final int whichScreen=(screenWidth+getScrollX()+(screenWidth/ 2 )) /screenWidth; snapToScreen(whichScreen); } public int getCurrentScreen(){ return mCurrentScreen; } public boolean isMainScreenShowing(){ return mCurrentScreen==SCREEN_MAIN; } public void openMenu(){ mCurrentScreen=SCREEN_MENU; snapToScreen(mCurrentScreen); } public void closeMenu(){ mCurrentScreen=SCREEN_MAIN; snapToScreen(mCurrentScreen); } public void unlock(){ mLocked= false ; } public void lock(){ mLocked= true ; } } activity_main.xml部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 < RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" > < net.ting.sliding.SlideMenu android:id = "@+id/slide_menu" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > < include layout = "@layout/layout_menu" /> < RelativeLayout android:layout_width = "fill_parent" android:layout_height = "fill_parent" android:background = "@color/color_2" android:orientation = "vertical" > < include layout = "@layout/layout_title_bar" /> < TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerInParent = "true" android:text = "HelloWorld" android:textSize = "22sp" /> </ RelativeLayout > </ net.ting.sliding.SlideMenu > </ RelativeLayout > layout_menu.xml部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 <? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "240dip" android:layout_height = "fill_parent" android:background = "@drawable/bitmap_book_read_chapterlist_repeat" android:orientation = "vertical" > < TextView android:layout_width = "240dip" android:layout_height = "28.0dip" android:background = "#ff313131" android:gravity = "center_vertical" android:paddingLeft = "15.0dip" android:text = "分类" android:textColor = "#ff959595" android:textSize = "14.0sp" /> < TextView android:layout_width = "240dip" android:layout_height = "50.0dip" android:background = "@drawable/selector_category_item" android:clickable = "true" android:drawableLeft = "@drawable/ic_category_mark" android:drawablePadding = "1.0dip" android:gravity = "center_vertical" android:paddingLeft = "15.0dip" android:paddingRight = "10.0dip" android:text = "侧边栏选项-1" android:textColor = "#ff959595" android:textSize = "16.0sp" /> < View android:layout_width = "240dip" android:layout_height = "2.0dip" android:background = "@drawable/ic_shelf_category_divider" /> < TextView android:layout_width = "240dip" android:layout_height = "50.0dip" android:background = "@drawable/selector_category_item" android:clickable = "true" android:drawableLeft = "@drawable/ic_category_mark" android:drawablePadding = "1.0dip" android:gravity = "center_vertical" android:paddingLeft = "15.0dip" android:paddingRight = "10.0dip" android:text = "侧边栏选项-2" android:textColor = "#ff959595" android:textSize = "16.0sp" /> < View android:layout_width = "240dip" android:layout_height = "2.0dip" android:background = "@drawable/ic_shelf_category_divider" /> < TextView android:layout_width = "240dip" android:layout_height = "50.0dip" android:background = "@drawable/selector_category_item" android:clickable = "true" android:drawableLeft = "@drawable/ic_category_mark" android:drawablePadding = "1.0dip" android:gravity = "center_vertical" android:paddingLeft = "15.0dip" android:paddingRight = "10.0dip" android:text = "侧边栏选项-3" android:textColor = "#ff959595" android:textSize = "16.0sp" /> < View android:layout_width = "240dip" android:layout_height = "2.0dip" android:background = "@drawable/ic_shelf_category_divider" /> </ LinearLayout > layout_title_bar.xml部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <? xml version = "1.0" encoding = "utf-8" ?> < RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "fill_parent" android:layout_height = "45.0dip" android:background = "@drawable/bg_title_bar" android:gravity = "center_vertical" > < ImageView android:id = "@+id/title_bar_menu_btn" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerVertical = "true" android:layout_marginLeft = "3.0dip" android:layout_marginRight = "3.0dip" android:layout_marginTop = "3.0dip" android:gravity = "center" android:src = "@drawable/ic_top_bar_category" /> < ImageView android:layout_width = "wrap_content" android:layout_height = "fill_parent" android:layout_toRightOf = "@id/title_bar_menu_btn" android:background = "@drawable/ic_top_divider" /> < TextView android:id = "@+id/title_bar_name" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerInParent = "true" android:ellipsize = "end" android:gravity = "center" android:paddingLeft = "75.0dip" android:paddingRight = "75.0dip" android:singleLine = "true" android:text = "Title" android:textColor = "#ffffff" android:textSize = "22sp" /> </ RelativeLayout > 按钮效果布局部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 bitmap_page_category_bg.xml: <? xml version = "1.0" encoding = "utf-8" ?> < bitmap android:src = "@drawable/ic_item_normal_bg" android:tileMode = "repeat" xmlns:android = "http://schemas.android.com/apk/res/android" /> selector_category_item.xml <? xml version = "1.0" encoding = "utf-8" ?> < selector xmlns:android = "http://schemas.android.com/apk/res/android" > < item android:state_pressed = "true" android:drawable = "@drawable/ic_item_selected_bg" /> < item android:state_focused = "true" android:drawable = "@drawable/ic_item_selected_bg" /> < item android:drawable = "@drawable/ic_item_normal_bg" /> </ selector > 附效果图: 附件:http://down.51cto.com/data/2364559 本文转自 吴雨声 51CTO博客,原文链接:http://blog.51cto.com/liangxiao/1429339,如需转载请自行联系原作者

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

HBase+Spark技术双周刊 第四期

直播往期回顾——视频回看及PPT下载 Solr增强HBase检索能力基础介绍及场景 在本期视频中,阿里高级开发工程师天斯介绍了Solr如何增强HBase检索能力,并通过示例帮助大家快速上手HBase+Solr查询应用。 HBase钉钉群直播预告 1月22日 Phoenix 全局索引原理与实践 张赟 1月29日 Spark on rds/MongoDB/HBase/Redis/OSS多数据源 云覆 阿里云栖开发者沙龙——线下活动 【1月18日 下午1:30】 阿里云栖开发者沙龙北京专场—互联网下半场的角逐:玩转轻资产的大数据服务 【1月19日 下午1:30】 阿里云栖开发者沙龙合肥专场:高并发企业级应用架构实践分享 推荐专家 沐远——阿里云数据库技术专家 沐远,专注大数据分布式计算数据库领域, 研发Spark及自主研发内存计算,目前为广大公有云用户

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

大数据情报第四期(2018-07-16)

《使用Kafka Streams构建事件溯源系统的经验分享》近期在乌克兰基辅举行的JEEConf大会上,Amitay Horwitz介绍了他的团队是如何实现一个事件溯源的发票系统、系统两年半生产环境运行期间所遇到的挑战,以及团队是如何使用Kafka Streams实现新的设计。 《使用Apache Kafka和KSQL实现普及化流处理》大多数的流处理技术,需要开发人员使用Java或Scala等编程语言编写代码。KSQL是Apache Kafka的数据流SQL引擎,它使用SQL语句替代编写大量代码去实现流处理任务。KSQL基于Kafka的Stream API构建,它支持过滤、转换、聚合、连接、加窗操作和Sessionization(即捕获单一会话期间的所有的流事件)等流处理操作。KSQL的用例涉及实现实时报表和仪表盘、基础设施和物联网

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

【安全问道】第四期:物联网安全,知多少?

当你的手表、音响、PC和手机都变成了智能设备,当你的家会变成一个万物互联的IOT环境。而物联网设备背后的安全性,你有关注过吗?在IOT安全上,个人用户、设备厂商、云平台,又该如何做好自己的“分内事”呢? 本期安全问道,IOT安全专家邬怡会与你分享物联网安全的话题。 点击观看视频 参考:埃森哲研究 - 到2030年产业物联网将为全球创造14.2万亿美元新产值 https://www.accenture.com/cn-zh/company-accenture-internet-of-things-davos-2015 IOT的技术、产业高速发展的背后,存在一些“揠苗助长”的现象。比如,IOT设备,很多都不像广告中说得那样“智能”;IOT设备的生产商,从传统的“不联网”过度到“互联”的急躁过渡中,对产品的性能、安全也会欠考虑 —— 设备漏洞被攻击者利用,造成严重后果 最典型的案例就是今年10月,美国域名服务器管理商Dyn遭攻击事件引发欧美知名网站大面积瘫痪后,美国国土安全部表态要提升“物联网”(internet of things)的安全保障。 参考:BBC - Dyn攻击案后 美国聚焦“物联网”保安 http://www.bbc.com/zhongwen/simp/business/2016/10/161025_us_cyber_attack_dyn 从个人用户、设备厂商、安全厂商到云平台,每一方如果都需要在物联网安全上做好自己的“分内事”,确保IOT设备设计、出厂、到用户使用全周期,安全性都能得到保证。 ————分割线———— 邬怡的聚能聊话题:怎么做才能让云上比云下更安全 https://yq.aliyun.com/roundtable/42341?spm=5176.8217306.rtmain.32.LVCiOM 云栖说 - 解决之道:从互联网安全到IoT安全,如何关上潘多拉魔盒? https://yq.aliyun.com/articles/64645?spm=5176.100240.searchblog.7.U6a9pv 来安全问道,看更多精彩视频:https://yq.aliyun.com/topic/55

资源下载

更多资源
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等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册