首页 文章 精选 留言 我的

精选列表

搜索[技巧],共4633篇文章
优秀的个人博客,低调大师

Java面试技巧和重点分析

一.前言 虽然本人也是刚入行不久,但是之前也做过一些面试准备,刚好7--8月份,还有部分学生或者初入开发行业的潜在同行,正在找工作,所以把自己的感触分享给大家,希望能够帮助到大家,能够顺利的通过面试笔试,进入自己心仪的公司。 二.重点 做为一名应届生或者初入开发行业人员,应该注重基础知识和一些框架工具的使用。 2.1:基础知识是系统原理和算法之类的,对这些原理理解的深度很重要,因为这是一种思维方式,所有的语言底层原理都差不多;一个人的技术上限是由他的基础决定的,在面试官面前展现的基础越扎实给面试官留下的印象更好。 2.2:对框架工具的了解不说是所有的,但是针对目前主流的框架不说了解的很清楚,但是也应该知道一些,比如SSH、SpringBoot、SpringCloud这些框架你需要知道他们的使用和他们核心的实现原理。比如Spring,你要知道 ioc , aop 和他的工厂是怎么实现的吧?这个东西你平时不去深究,你使用再久Spring可能都不知道原理。但是你不去了解先进技术的实现原理你怎么可能研究出新的技术和框架? 2.3:知识的了解不应该只浮于表面,应该有深度和广度。这点在我进入公司工作之前我没有任何认知,但是在进入公司后和领导、同事接触后,深深的发现自己对知识积累点的单薄,可能有的人会说,这些基础的东西这么简单,我早就学会了,平时一直都在写,没必要去专门再学。但是这样的,请问,天天在用String的你,知道它的实现,能理解应用那些设计模式吗? 在面对面试官的时候,你永远不会知道他的下一个问题是什么,所以对知识点的储存,深挖永远都没有错,总结一下就是,打好基础底子,千万不要飘,深入学习,这样你面对面试官的时候,才能有更多的可以聊的话题,从容面对面试官的话题,更快的融入公司。 三.总结 以上我个人看法,并不一定是正确的。每个人的想法都不一样,毕竟自己目前也还是一个菜鸟,希望和大家在学习的道路上共同进步,另外以下是总结的一些面试题目,有兴趣可以看下,谢谢 1、 面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。- 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。- 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。- 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2). 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。 2、 float f=3.4;是否正确?答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。 3、 :成员变量与局部变量的区别? 成员变量:有类成员变量(有static修饰)和实例成员变量(无static修饰)两种 局部变量:有代码块局部变量,形参,方法局部变量三种 区别:作用范围不同,成员变量对整个类有效,局部变量只对该方法或代码块有用定义成员变量是可以不初始化,局部变量除了形参之外,必须初始化 4、 Equals与 == 的区别 ==既可以比较基本类型,也可以比较引用类型,比较引用类型时,必须是父子关系 equals只能比较引用类型,比较是地址 5、 接口与抽象类的区别 区别:相同点: 1,都不能实例化 2,都有抽象方法不同点: 1,接口只能定义常量,抽象类既可以定义常量也可以定义变量 2,接口里没有构造器和初始化块,抽象类有构造器和初始化块 3,接口里只有抽象方法,抽象类里有抽象方法和普通方法 4,接口可以实现多个,抽象类的继承只能继承一个 5,接口只能实现接口,不能实现其他类,抽象类即可实现接口,也可继承其他类 6,接口定义用interface,抽象类定义用extends

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

java或判断优化小技巧

写业务代码的时候,我们经常要做条件判断,有的时候条件判断的或判断长达20多个。reg.equals("1") || reg.equals("2") || reg.equals("3")||.....是不是很奔溃 1,这个时候代码维护不好维护,字段一多对字段就会出错。 2,在最差情况下,执行语句要对这20个判断都判断一下才知道最终的结果,在高性能业务下发挥并不好。 这个时候我们可以用map或set来进行判断,因为hashmap是一个hash桶,查找的效率是比较快的,不管判断任何值他的查询效率基本稳定。 当然最好指定hashmap的长度和判断的元素一样多,这样就避免对某一个桶内衍生出链表了。 例子如下,大家可以试一试。 /** * @author:YangLiu * @date:2018年3月22日 上午10:06:25 * @describe: */ public class ifMap { public static Map<String, String> ISJACARD = new HashMap<String, String>(20) { { put("1", ""); put("2", ""); put("3", ""); put("4", ""); put("5", ""); put("6", ""); put("7", ""); put("8", ""); put("9", ""); put("11", ""); put("12", ""); put("13", ""); put("14", ""); put("15", ""); put("16", ""); put("17", ""); put("18", ""); put("19", ""); put("21", ""); put("22", ""); put("23", ""); put("24", ""); put("25", ""); put("26", ""); put("27", ""); put("28", ""); put("29", ""); } }; public static void main(String[] args) { String reg = "13"; long start = System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { if (reg.equals("1") || reg.equals("2") || reg.equals("3") || reg.equals("4") || reg.equals("5") || reg.equals("6") || reg.equals("7") || reg.equals("8") || reg.equals("9") || reg.equals("19") || reg.equals("18") || reg.equals("17") || reg.equals("16") || reg.equals("15") || reg.equals("14") || reg.equals("13") || reg.equals("12") || reg.equals("11")) { } } System.out.println(System.currentTimeMillis() - start); start = System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { if (ISJACARD.containsKey(reg)) { } } System.out.println(System.currentTimeMillis() - start); } } 作者: intsmaze(刘洋) 出处: http://www.cnblogs.com/intsmaze/ 老铁,你的--->推荐,--->关注,--->评论--->是我继续写作的动力。 微信公众号号:Apache技术研究院 由于博主能力有限,文中可能存在描述不正确,欢迎指正、补充! 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

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

Markdown快速入门写作技巧

本篇文章主要介绍在简书中写文章如何运用Markdown来快速编写一篇文章。Markdown的语法规则会在文章中提现。这个适用于基础入门的。一些不常用的语法,我就没有列举出来了。大家可以自己查Markdown语法手册深入学习。 如何使用Markdown常用语法 1、标题讲解 标题例子: #如何使用Markdown常用语法 (标题共有6种,以#开头) 2、字体加粗加斜体 字体例子: 字体***加粗加斜体***(1个*代表斜体,2个**代表粗体) 3、代码块 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!--Toolbar--> <include layout="@layout/custom_toolbar" /> <!--DrawerLayout--> <include layout="@layout/custom_drawerlayout" /> </LinearLayout> 语法:``` ``` 4、图片展示 图片例子: ![图片展示](http://upload-images.jianshu.io/upload_images/4853049-6204bb2d3436cd95.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/440) 语法:![]() 5、链接展示 如果你想链接到其他地方,可以点击链接 链接例子: 可以点击[链接](http://www.baidu.com) 语法:[]() 6、引用展示 引言:Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。 引用例子: >引言:Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。 语法 :>开头 7、列表问题 a、无序列表 列表一 列表二 列表三 无序列表例子: + 列表一 * 列表二 - 列表三 语法:可以是【+ - *】 +空格 b、有序列表 列表一 列表二 列表三 列表一 列表二 列表三语法:数字. +空格 8、分割线 分割线例子: 语法:【---或者***】至少3个或3个以上 下面推荐我使用过的2种编辑器: 1、Marxico:中文名马克飞象 2、MarkdownPad:Windows 平台最好用的markdown编辑器之一 以上八点,就是日常Markdown常用语法,我相信只要认真用这个写几篇文章,马上就可以上手的。用上Markdown写作可以不要作者特意去排版,只需要专注于内容的输出就行,现在大部分的博客也开始在慢慢的支持Markdown写作格式,比较出名有CSDN博客和简书。

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

Jbuilder2005开发小技巧

1) 安装好jbuilder2005后,可以看下它的安装目录,对以后很有帮助。它主要的目录有:(1)bin目录。这里存放各种可执行的二进制文件。(2)doc目录。这里存放各种.jar格式的javadoc帮助文档,jbuilder2005会调用这个目录下的帮助文件来显示帮助信息。(3)extras目录:这里有一些著名的第三方开源项目 (4)jdk1.4目录:自带的一个jdk 。(5)lib目录。存放jbuilder2005的各种类库 (6)patch目录:存放补丁的地方。(7)samples目录:这是我们最应该学习的地方了,很多示例程序 (8)src目录:jbuilder2005开发的组件和类库的源代码。(9)templates目录:jbuilder2005各种技术的模板。(10)thirdparty目录:放置第三方开源项目的文档。 2) 当你需要查找一个类的信息时,可以Search->Find classes,就会载入类的代码,切换到doc就可以查看文挡。或者你可以将光标定位到要查看的类上,Ctrl+Q就可以调出帮助信息。此外,你也可以按F1,就可以调出帮助信息。 3) Jbuilder2005安装好后,不要立即启动,因为还存在着几个问题。1)光标错位。解决办法:在〈Jbuilder2005安装目录〉/bin目录下找到jbuilder.config文件,加入这样的: 20 vmmemmin 32m 21 vmmemmax 75% 22 vmparam –Dprimetime.editor.useVariableWidthFont=true 加入黑体的这一行再启动jbuilder,就可以解决掉问题。 4) jdk5.0新特性: a)监视和管理,新加javax.management和java.lang.management包 package com.vitamin.Console; import java.lang.management.*; import java.util.*; import javax.management.*; public class MemoTest { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 List pools = ManagementFactory.getMemoryPoolMXBeans(); for(ListIterator i = pools.listIterator();i.hasNext();) { MemoryPoolMXBean p = (MemoryPoolMXBean)i.next(); System.out.println("内存类型: "+p.getType()); System.out.println("内存使用情况: "+p.getUsage()); } } } b).泛型 未使用泛型的代码: package com.vitamin.Console; import java.util.ArrayList; import java.lang.*; public class MemoTest { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 ArrayList al = new ArrayList(); al.add(0,new Integer(44)); int tol = ((Integer)al.get(0)).intValue(); System.out.println(tol); } } 使用泛型的代码: package com.vitamin.Console; import java.util.ArrayList; import java.lang.*; public class MemoTest { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 ArrayList<Integer> al = new ArrayList<Integer>(); al.add(0,new Integer(44)); int tol = al.get(0).intValue(); System.out.println(tol); } } 使用泛型可以不需要再进行类型转换了,而且如果往里面添加类型不符合的数据的话,在编译时就会报错。 c)自动装/拆箱 未使用: ArrayList<Integer> al = new ArrayList<Integer>(); al.add(0,new Integer(44)); int tol = al.get(0).intValue(); 使用: ArrayList<Integer> al = new ArrayList<Integer>(); al.add(0, 44); int tol = al.get(0); d)增强型for循环 未使用: ArrayList<Integer> list = new ArrayList<Integer>(); For(Iterator I = list.iterator();i.hasNext();) { Integer value = (Integer)i.next(); } 使用: ArrayList<Integer> list = new ArrayList<Integer>(); For(Integer i : list) { Integer value = i ; } 甚至可以: ArrayList<Integer> list = new ArrayList<Integer>(); For(int i : list) { int value = i ; } e)引入了新关键字enum public enum StopLight { Reg,Green,Yellow } f)静态引入 使用前: Import java.awt.BorderLayout.*; getContentPane().add(new JPanel(),BorderLayout.CENTER); 使用后: Import static java.awt.BorderLayout.*; getContentPane().add(new JPanel(),CENTER); g)格式化输出/输入 System.out.printf(“hello,World\n”); System.out.printf(“%s %5d”,user,total); Scanner s = Scanner.create(System.in); String param = s.next(); Int value = s.nextInt(); s.close(); h)不定参数 它允许在一个方法中传入多个不定数量的参数, Void myFunc(Object. . . args) { For(int I = 0;I <args.length;i++) { } } myFunc(“tt”,”dafa”); 本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/06/17/428250.html,如需转载请自行联系原作者

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

HiveQL的一些技巧

随机抽样 有的时候我们需要从一张大表中随机抽取一定量的样本供分析,Hive中提供了一个rand()函数,我们就利用这个来实现随机抽样。 思路如下: 对于表中每行均附加一个随机的整数,然后再以该整数进行orderBy即可得。 例如下面这个 selectvt.user_nick,vt.vidxfrom( selectuser_nick,cast(rand()*100000asint)asvidx froms_mc_xcard_userwherept='20120808000000' orderbyvidxlimit10000 )vtorderbyvt.vidxlimit100 处理复杂的数据结构 如果我们希望将复杂的数据结构存储在Hive表中,可以使用Json字符串这种东东来承载。Hive中提供了一个get_json_object的函数供json解析;这个函数里面的第二个参数比较令人费解,不过官方文档还算是清楚。 另外hive还提供了array,struct, map等数据结构,貌似目前功能很少,不建议使用。 行列转置 比如有一张这样的表: uid int mydata array 100 'a','b','c' 101 'a','c' 其中data字段是一个array类型(可由split函数得到)。 我们希望得到下面这样的结果: 'a' 2 'b' 1 'c' 2 其中,第二个字段的含义是各个data的分量出现的次数。 在Hive中,这种能生成了新的行函数被称作UDTF,这里我们可以使用explode+lateral view来达到目的。 SELECTonedata,count(1)FROMtblLATERALVIEWexplode(mydata) vdataASonedata; 本文转自 kevx 51CTO博客,原文链接:http://blog.51cto.com/spinlock/959607,如需转载请自行联系原作者

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

iOS开发技巧 -- 复用代码片段

如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcode的代码片库里,直接使用, 从而提高开发效率; 1. 将常用代码片段封装成一个类里 当一个代码片在一个或多个工程之中经常出现时,把他封装在一个类里面,在使用时候直接传参即可实现对于功能,或者直接把这类放到另一个工程中同样使用; 使用UIAlertView举例 创建一个XF_UIKit类,对于声明文件和实现文件为 1 2 3 4 5 6 7 8 9 10 11 // // XF_UIKit.h // Demo // // Created by DolBy on 13-6-17. // Copyright (c) 2013年 新风作浪. All rights reserved. // #import <Foundation/Foundation.h> @interface XF_UIKit : NSObject +( void )showAlert:(NSString *)title withMessage:(NSString *)message witchCancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; @end 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // // XF_UIKit.m // Demo // // Created by DolBy on 13-6-17. // Copyright (c) 2013年 新风作浪. All rights reserved. // #import "XF_UIKit.h" @implementation XF_UIKit +( void )showAlert:(NSString *)title withMessage:(NSString *)message witchCancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil]; [alert show]; [alert release]; } @end 使用的时候引入头文件直接调用类方法 1 2 3 4 5 6 - ( void )viewDidLoad { [super viewDidLoad]; [XF_UIKit showAlert:@ "警告" withMessage:@ "新风作浪的测试 " witchCancelButtonTitle:@ "OK" otherButtonTitles: nil]; // Do any additional setup after loading the view, typically from a nib. } 2.使用宏 在iOS开发中那些高效常用的宏一文例举了宏的使用,此处不再赘述; 3.使用Xcode自带代码片段库 在属性面板下面有一栏库面板选择条,有一项Code Snippet Library有iOS下OS X 和 User(用户自定义的)代码片段存储 (1)在这些库里有系统自带的代码片段,使用的时候直接拖到工程里,填上参数即可使用。 (2)用户自定义代码块,这也是本文讲解的重点。例如: 做过开发的都知道使用表示图单元格比较频繁,经常频繁写他们的delegate方法,如果把它们收集起来 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #pragma mark - #pragma mark UITableViewDataSource and UITableViewDelegate Methods -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 10; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @ "Cell" ; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } return cell; } 这是绘制一个基本表示图单元必须实现的协议方法,全选这些代码拖到Code Snippet Library里面,如下图 然后会弹出一个编辑框,然后进行一个简单编辑,title表示你这个代码块标题,Summary 对这段代码片的简单介绍,Completion Shortcut表示一个快捷键,在我们工程中只要输入快捷键就可以显示整段代码片; 相应设置 把参数放在两个#号之间,比如 #参数# 编辑完毕选择Done,在User下即可看到TbaleView代码块 在使用的时候两种方式 ①直接把这个代码块拖到工程中; ②在工程里面输入自己设置的快件建代码,比如刚刚设置的XFTableView,真个代码块全部出现; 在资源库(Libary)/Developer/Xcode/UserData/CodeSnippets下存放的就是你自定义的代码片段,如果重装Xcode记得备份哦! 本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1225867,如需转载请自行联系原作者

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

干货:模板网站SEO优化技巧

对企业来说,线上流量的关键就是SEO优化。模板网站是否有利于SEO优化?很多人会以为定制网站比模板网站更利于优化,其实并不全对。下面笔者就为大家解答模版网站如何进行SEO优化。 模版网站不利于SEO优化吗? SEO优化刚流行时,建设网站往往会选择模板建站方式,起初百度的各项优化制度并不完善,对SEO优化的要求也并不严格,模板建站在当时是比较流行的,很少有人去单独通过定制来制作网站。随着百度算法的不断更新,对优化的要求也越来越高。框架式的模板网站逐渐不被百度新算法所接纳,所以形成了一种广为流传的说法“模板网站不利于SEO优化”。 归根结底,形成这个说法的原因是各个企业之间的网站架构高度相似,优化难度增加,且对百度爬虫也产生了不良影响。下面的老式框架网站就是一个不利于搜索的框架网站。 随着互联网步入成熟期,模板网站在SEO优化以及可视化设计上

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

adb常用命令,技巧

安装、卸载apk adb connect ip:31015 指定端口连接,如果不指定端口,默认端口一般为5555 adb disconnect 断开连接 adb uninstall com.app.lication 卸载软件 强制卸载 adb shell cd /data/app 或者 cd /system/app (查找应用包名) ls 查看有没我们的APK安装包 rm apk文件名 exit mount -o rw,remount /system 改变文件的只读属性 adb install /path/to/file.apk 安装包的绝对路径 adb install -r /path/to/file.apk 强制安装apk 安装到sysystem路径下,可能需要root权限 adb shell 进入系统命令行 mount -o remount rw /system 用读写重新加载/system exit 退到adb模式 adb push /path/to/file.apk 安装包的绝对路径 查找apk安装路径 cat /data/system/packages.xml 或cat /data/system/packages.xml|grep XXX 打印日志 adb logcat -v time 打印日志 adb logcat -v time >> d:/a.txt 将打印日志保存在D盘,命名为a.txt ctrl +c 停止 adb shell bugreport > d:/1.txt 包括内存分配,cpu使用情况,按键分发,组件状态,虚拟内存状态 adb pull /data/anr/traces.txt d:/traces.txt 程序无响应日志导出 adb logcat -c 清除信息 截图 机顶盒截图: adb shell /system/bin/screencap -p /data/XX.png 将截图推到本地 adb pull /data/XX.png > D:/png/XX.png apk操作 adb shell am start com.app.lication 启动apk am force-stop com.app.lication 强制停止 pm clear com.app.lication 清除缓存 设置DNS和hosts DNS adb shell setprop net.dns1 8.8.8.8 setprop net.dns2 8.8.4.4 hosts echo "10.0.0.1 baidu.com" >>/etc/hosts other getprop | grep dns 查看stb的dns信息 netcfg 查看网卡信息

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

安卓框架——SlidingMenu使用技巧

SlidingMenu的一些常用属性 原文转载http://blog.csdn.net/zwl5670/article/details/48274109 [java] view plain copy //设置侧滑菜单的位置,可选值LEFT,RIGHT,LEFT_RIGHT(两边都有菜单时设置) menu.setMode(SlidingMenu.LEFT_RIGHT); //设置触摸屏幕的模式,可选只MARGIN,CONTENT menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); //根据dimension资源文件的ID来设置阴影的宽度 menu.setShadowWidthRes(R.dimen.shadow_width); //根据资源文件ID来设置滑动菜单的阴影效果 menu.setShadowDrawable(R.drawable.shadow); //这两个都是设置滑动菜单视图的宽度,二选一 //设置SlidingMenu离屏幕的偏移量 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置宽度 menu.setBehindWidth() //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); //设置SlidingMenu与下方视图的移动的速度比,当为1时同时移动,取值0-1 menu.setBehindScrollScale(1.0f); //设置二级菜单的阴影效果 menu.setSecondaryShadowDrawable(R.drawable.shadow); //设置右边(二级)侧滑菜单 menu.setSecondaryMenu(R.layout.right_menu_frame); //为侧滑菜单设置布局 menu.setMenu(R.layout.leftmenu); //把滑动菜单添加进所有的Activity中,可选值SLIDING_CONTENT,SLIDING_WINDOW menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 1、在Activity中通过SlidingMenu构造方法,直接设置侧滑菜单 [java] view plain copy publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SlidingMenumenu=newSlidingMenu(this);//初始化滑动菜单 menu.setMode(SlidingMenu.LEFT);//设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影的宽度 menu.setShadowDrawable(R.drawable.shadow);//设置滑动菜单的阴影效果 //设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); /** *SLIDING_WINDOWwillincludetheTitle/ActionBarinthecontent *sectionoftheSlidingMenu,whileSLIDING_CONTENTdoesnot. */ //把滑动菜单添加进所有的Activity中 menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); //为侧滑菜单设置布局 menu.setMenu(R.layout.leftmenu); } } 2、通过把Activity继承SlidingActivity a、继承SlidingActivity b、然后在onCreate中setBehindContentView(R.layout.leftmenu); 设置侧滑菜单的布局 c、通过getSlidingMenu()得到SlidingMenu对象,然后设置样式 [java] view plain copy publicclassMainActivityextendsSlidingActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setBehindContentView(R.layout.leftmenu); //configuretheSlidingMenu SlidingMenumenu=getSlidingMenu(); menu.setMode(SlidingMenu.LEFT); //设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); //设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); /** *SLIDING_WINDOWwillincludetheTitle/ActionBarinthecontent *sectionoftheSlidingMenu,whileSLIDING_CONTENTdoesnot. */ //menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); //menu.setMenu(R.layout.leftmenu); } } 3、将SlidingMenu当作普通控件 可以把SlidingMenu作为普通的view,然后在布局中声明。 [java] view plain copy <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/id_main_ly" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp"> <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu xmlns:sliding="http://schemas.android.com/apk/res-auto" android:id="@+id/slidingmenulayout" android:layout_width="120dp" android:layout_height="170dp" android:background="#ffffffff" sliding:behindOffset="0dp" sliding:behindScrollScale="1" sliding:fadeDegree="0.3" sliding:fadeEnabled="true" sliding:touchModeAbove="fullscreen" sliding:viewAbove="@layout/pic"/> </LinearLayout> </RelativeLayout> pic布局: [plain] view plain copy <?xmlversion="1.0"encoding="utf-8"?> <ImageViewxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="170dp" android:src="@drawable/zhy"/> MainActivity: [java] view plain copy packagecom.zhy.zhy_slidemenu_demo03; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importcom.jeremyfeinstein.slidingmenu.lib.SlidingMenu; publicclassMainActivityextendsActivity { privateSlidingMenumLeftMenu; @Override protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLeftMenu=(SlidingMenu)findViewById(R.id.slidingmenulayout); //configuretheSlidingMenu //SlidingMenumenu=newSlidingMenu(this); mLeftMenu.setMode(SlidingMenu.LEFT); //设置触摸屏幕的模式 mLeftMenu.setShadowWidthRes(R.dimen.shadow_width); mLeftMenu.setShadowDrawable(R.drawable.shadow); mLeftMenu.setMenu(R.layout.leftmenu); mLeftMenu.setOnClickListener(newOnClickListener() { @Override publicvoidonClick(Viewv) { if(mLeftMenu.isMenuShowing()) mLeftMenu.toggle(); } }); //设置滑动菜单视图的宽度 //设置渐入渐出效果的值 /** *SLIDING_WINDOWwillincludetheTitle/ActionBarinthecontent *sectionoftheSlidingMenu,whileSLIDING_CONTENTdoesnot. */ } } 4、SlidingMenu设置左右侧滑菜单例子 上面3个方法,SlidingMenu的布局中控件的事件都需要写在Activity中,这样代码比较臃肿,一般会使用Fragment作为侧滑菜单的布局容器。 核心代码: · [java] view plain copy FragmentleftMenuFragment=newMenuLeftFragment(); ·setBehindContentView(R.layout.left_menu_frame); ·getSupportFragmentManager().beginTransaction() ·.replace(R.id.id_left_menu_frame,leftMenuFragment).commit(); ·SlidingMenumenu=getSlidingMenu(); ·menu.setMode(SlidingMenu.LEFT_RIGHT); ·//设置触摸屏幕的模式 ·menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 先给侧滑菜单通过 setBehindContentView(R.layout.left_menu_frame); 设置一个布局,此布局中只有一个FrameLayout,然后使用FragmentManager将Fragment替换掉此Fragment,这样这个 Fragment就作为我们侧滑菜单的布局了,我们的事件处理代码也可以写在Fragement中,而不是Activity中。 MenuLeftFragment [java] view plain copy packagecom.zhy.zhy_slidemenu_demo04; importjava.util.Arrays; importjava.util.List; importandroid.os.Bundle; importandroid.support.v4.app.Fragment; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.ArrayAdapter; importandroid.widget.ListAdapter; importandroid.widget.ListView; publicclassMenuLeftFragmentextendsFragment { privateViewmView; privateListViewmCategories; privateList<String>mDatas=Arrays .asList("聊天","发现","通讯录","朋友圈","订阅号"); privateListAdaptermAdapter; @Override publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer, BundlesavedInstanceState){ if(mView==null){ initView(inflater,container); } returnmView; } privatevoidinitView(LayoutInflaterinflater,ViewGroupcontainer){ mView=inflater.inflate(R.layout.left_menu,container,false); mCategories=(ListView)mView .findViewById(R.id.id_listview_categories); mAdapter=newArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,mDatas); mCategories.setAdapter(mAdapter); } } MenuRightFragment packagecom.zhy.zhy_slidemenu_demo04; importandroid.os.Bundle; importandroid.support.v4.app.Fragment; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup; publicclassMenuRightFragmentextendsFragment{ privateViewmView; @Override publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer, BundlesavedInstanceState){ if(mView==null){ mView=inflater.inflate(R.layout.right_menu,container,false); } returnmView; } } MainActivity [java] view plain copy publicclassMainActivityextendsSlidingFragmentActivity{ privateViewPagermViewPager; privateFragmentPagerAdaptermAdapter; privateList<Fragment>mFragments=newArrayList<Fragment>(); @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); //初始化SlideMenu initRightMenu(); //初始化ViewPager initViewPager(); } privatevoidinitViewPager(){ mViewPager=(ViewPager)findViewById(R.id.id_viewpager); MainTab01tab01=newMainTab01(); MainTab02tab02=newMainTab02(); MainTab03tab03=newMainTab03(); mFragments.add(tab01); mFragments.add(tab02); mFragments.add(tab03); /** *初始化Adapter */ mAdapter=newFragmentPagerAdapter(getSupportFragmentManager()){ @Override publicintgetCount(){ returnmFragments.size(); } @Override publicFragmentgetItem(intarg0){ returnmFragments.get(arg0); } }; mViewPager.setAdapter(mAdapter); } privatevoidinitRightMenu(){ FragmentleftMenuFragment=newMenuLeftFragment(); setBehindContentView(R.layout.left_menu_frame); getSupportFragmentManager().beginTransaction() .replace(R.id.id_left_menu_frame,leftMenuFragment).commit(); SlidingMenumenu=getSlidingMenu(); menu.setMode(SlidingMenu.LEFT_RIGHT); //设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); //设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); //menu.setBehindScrollScale(1.0f); menu.setSecondaryShadowDrawable(R.drawable.shadow); //设置右边(二级)侧滑菜单 menu.setSecondaryMenu(R.layout.right_menu_frame); FragmentrightMenuFragment=newMenuRightFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.id_right_menu_frame,rightMenuFragment).commit(); } publicvoidshowLeftMenu(Viewview){ getSlidingMenu().showMenu(); } publicvoidshowRightMenu(Viewview){ getSlidingMenu().showSecondaryMenu(); } } MainActivity继承的是SlidingFragmentActivity ,在Activity中FragmentPagerAdapter和viewPager作为主布局,然后分别初始化SlidingMenu的两边的菜单。

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

CentOS yum源配置小技巧

一、配置yum源 网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。具体设置方法如下: 1,进入yum源配置目录 #cd/etc/yum.repos.d 2,备份系统自带的yum源 #mvCentOS-Base.repoCentOS-Base.repo.bk 下载163网易的yum源: #wgethttp://mirrors.163.com/.help/CentOS6-Base-163.repo 3,更新玩yum源后,执行下边命令更新yum配置,使操作立即生效 #yummakecache 4,除了网易之外,国内还有其他不错的yum源,比如中科大和搜狐的,大家可以根据自己需求下载 中科大的yum源: #wgethttp://centos.ustc.edu.cn/CentOS-Base.repo sohu的yum源 #wgethttp://mirrors.sohu.com/help/CentOS-Base-sohu.repo 理论上讲,这些yum源redhat系统以及fedora也是可以用 的,但是没有经过测试,需要的可以自己测试一下。 二、安装yum-downloadonly,下载rpm软件包 方法1、安装yum-downloadonly插件,下载rpm包; #wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-5.repo #yuminstallyum-downloadonly #yuminstall--downloadonly--downloaddir=/nginx.rpmpcre 如果下载不到yum-downloadonly这个软件包,请查看附件,下载之后解压缩,上传到linux上,进行安装。 方法2、修改配置文件/etc/yum.conf ,将keepcache=0 修改为keepcache=1 通过yum安装的软件将会在下面的cachedir中缓存。 cachedir=/var/cache/yum/$basearch/$releasever 例如: #cd/var/cache/yum/x86_64/6/base/packages/ libpcap-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm tcpdump-4.0.0-9.20090921gitdf3cb4.2.el6.x86_64.rpm 三、使用CentOS的iso搭建本地yum源 #ls/etc/yum.repos.d/ #CentOS-Base.repoCentOS-Media.repo #cp/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.bak #vim/etc/yum.repos.d/CentOS-Base.repo 1[dvd] 2name=installdvd 3baseurl=file:///media/CentOS_6.5_Final#iso的挂载路径 4enable=1 5gpgcheck=1#是否对下载的rpm包进行安全检查 6gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 #yummakecache Loadedplugins:fastestmirror Loadingmirrorspeedsfromcachedhostfile dvd|1.1kB00:00 dvd/filelists|2.9MB00:00 dvd/other|9.1MB00:00 dvd/group|920kB00:00 dvd/primary|920kB00:00 dvd2599/2599 dvd2599/2599 dvd2599/2599 MetadataCacheCreated

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

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

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文件系统,支持十年生命周期更新。

用户登录
用户注册