java中创建数组时内存怎么分配????

int[] arr=new int[3];

问题: 上面创建int数组时,怎么分配内存的?arr是一个引用变量,是通过指针指向new int[3](存在堆里面)对吧,那么,栈里面为arr分配几个指针,是3个还是1个?

补充:

疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是“数组长度”个?

疑问2****: 如果是一个,那么,这个指正指向谁????

疑问3****: 如果指向的是第一个元素,那么,该指针怎么索引数组的其它元素????

疑问4****: 如果疑问3中索引方式是通过指针值加上数组元素所占内存大小的来索引下一个元素,那么,当元素不是基本数据类型,而是摸个对象的实例时,又是怎么索引的???(实例对象数组的元素在元素创建时可是null的,对吧。而且在数组使用过程中数组元素指向的对象是可以变的,这不就意味着内存在变吗!!)

综合上述:我觉得数组创建时(我指的是被new出来时),栈中会为数组创建数组长度个指针分别指向每个元素。

但是,问题又来了。

问题5****:

int[] arr;//这里分配几个指针(栈)??

arr=new int[3];

还请大神来解答我的疑惑,能解答一个是一个。。。谢谢。。

1个回答

疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是“数组长度”个?
栈中为arr分配一个存储单位,存储的是指向一个新创建的数组的引用
疑问2****: 如果是一个,那么,这个指正指向谁????
指向数组对象
疑问3****: 如果指向的是第一个元素,那么,该指针怎么索引数组的其它元素????
指向数组对象,数组对象包含它的长度,和C++不同,这是引用,不是指针
疑问4****: 如果疑问3中索引方式是通过指针值加上数组元素所占内存大小的来索引下一个元素,那么,当元素不是基本数据类型,而是摸个对象的实例时,又是怎么索引的???(
那很简单,就是指向数组对象,当你通过数组+索引访问元素的时候,得到的对象的引用,再指向真正的对象
问题5****:
int[] arr;//这里分配几个指针(栈)??
arr=new int[3];
这里第一行定义了一个数组对象的引用,叫arr,但是不指向任何对象
new int[3]创建了一个三个元素的数组对象,并且让arr指向它

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JAVA中数组的创建,以及数组在内存中的分配
int[] arr = new int[3]; 和 int[] arr1 = {1,2,3}; 和 int[] arr2 = new int[] {1,2,3}; 这三种方式都会在堆内存中创建一个数组对象的实体吗?还是只有第一种方式能创建实体?
Java数组边界,验证,存储问题!
在Java中如何完成边界检查?如何创建一个对象数组?数组在内存分配是如何造成的?
# java字符串二维数组创建对象个数的问题
在java中运行这一句代码: String[][] str = new String[3][4]; 假设是第一次运行,在内存中会产生多少个对象?请说明理由,不要说一个单纯的数字.谢谢.
有关java语句在内存中的分配
如:int[] a=new int[]{1,2,3} 我知道new关键字会在堆中创建int类型数组对象 那么 int[] a={1,2,3}没有关键字new会不会创建对象
Java内存管理,求教大神!
class Xoo{ int x; } class Yoo extends Xoo{ int y; } main方法中运行以下代码: Xoo[ ] arr =new Yoo(); 请问以上代码,在内存中是否为: 1.在栈中创建Xoo[ ]数组类型的引用变量 2.在堆中创建引用类型数组对象,共四个元素,每个元素为Xoo类型的引用,初始值为null(我原本以为数组每个元素应为Yoo类型的引用,但经过验证使用arr[0]只能调用Xoo类的方法而不能调用Yoo类的方法,不过这样new Yoo()就显得毫无意义了) 求大神指教,我的推测是否正确,如果错误,以上代码在内存中是如何运行的?谢谢!
Java内存管理问题。求大神赐教!
class Xoo{ int x; } class Yoo extends Xoo{ int y; } main方法中运行以下代码: Xoo[ ] arr =new Yoo[4]; 请问以上代码,在内存中是否为: 1.在栈中创建Xoo[ ]数组类型的引用变量 2.在堆中创建引用类型数组对象,共四个元素,每个元素为Xoo类型的引用,初始值为null(我原本以为数组每个元素应为Yoo类型的引用,但经过验证使用arr[0]只能调用Xoo类的方法而不能调用Yoo类的方法,不过这样new Yoo()就显得毫无意义了) 求大神指教,我的推测是否正确,如果错误,以上代码在内存中是如何运行的?谢谢!
BufferedInputStream属于字节流,那字节流和字符流的区别是什么
网上说字节流和字符流的区别是: 字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。 而BufferedInputStream和BufferedOutputStream创建一个内部缓冲区数组并将其存储在 buf 中,该buf的大小默认为8192,也使用到了缓冲区,为什么属于字节流,不属于字符流。
JVM内存溢出问题:freeMemory还很大,为什么出现了OOM?
我使用java编写的一个应用程序,用于产生数据插入到HBase数据库中,但是程序在运行一段时间后就会产生OOM异常: Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:640) at java.util.concurrent.ThreadPoolExecutor.addIfUnderCorePoolSize(ThreadPoolExecutor.java:703) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:652) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92) at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1401) at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchOfPuts(HConnectionManager.java:1499) at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:859) at org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:715) at org.apache.hadoop.hbase.client.HTable.put(HTable.java:693) at storm.monitor.hbase.BasicOperation.addRecord(BasicOperation.java:135) at storm.monitor.util.HBase_Operation.insertIntoHBase(HBase_Operation.java:75) at storm.monitor.util.Data_Generator.insertIntoHBase(Data_Generator.java:215) at storm.monitor.util.Data_Generator.run(Data_Generator.java:394) at storm.monitor.util.Data_Generator.init(Data_Generator.java:68) at storm.monitor.util.Data_Generator.<init>(Data_Generator.java:41) at storm.monitor.util.Main_Generator.main(Main_Generator.java:22) 可是我在类中获得Runtime,输出freeMemory,totalMemory如下free 505328288 total 528154624 max 1037959168 ,明显的可用内存还有很多,怎么会出现上述异常呢? 在我的类中,方法多是静态方法,不过全局变量很少使用,一般都是创建的临时变量,并且是方法结束前都设为null。并且只有一个LinkedList全局对象和几个多维数组。 在eclipse中设置了(x)arguments -Xms512m -Xmx1024m。 到底是什么原因导致了OOM呢,整个应用程序中并没有创建线程的地方。 求解惑!
c++结构体数组赋值问题
使用getline把处理的数据输出到txt文档中,变成如下格式: 搜索 www.baidu.com 搜索 www.goole.com 电商 www.baidu.com . . 现在要用结构体数组存储, typedef struct tagMember { char *name; char *group; }; struct tagMember url[20]; 然后我读取生成的txt文件后出现内存报错,也不懂赋值,求大神解惑。 代码如下,我是学java的,C++的指针和结构体迷迷糊糊的 ``` #include <atlstr.h> #include <winbase.h> #include <algorithm> #include <iostream> #include <string> #include <list> #include <fstream> #include <vector> #include <cstring> #include <io.h> #include <set> using namespace std; typedef struct tagMember { char *name; char *group; }; tagMember url[500]; void GetLineAndPrint(string in_name) { //string tname; ifstream fin(in_name); int l = in_name.size(); string tname(in_name.substr(0,l-4)); //int pos = in_name.find('.'); //if(pos>0) //tname = in_name.left(pos); int pos1 = tname.find_last_of('\\'); string fname(tname.substr(pos1+1)); //ofstream fout("1.txt",ios::app); //typedef set<string> set_t; //set_t s; if(!fin) { cerr<<"open file error"<<endl; exit(-1); } string str; int i=0; while(getline(fin,str)) { char * ss = new char[str.length()];//申请空间 char * tt = new char[str.length()]; strcpy(ss,(char *)str.data());//赋值 strcpy(tt,(char *)fname.data()); url[i].name=ss; url[i].group=tt; i++; //s.insert(str); //t.insert(name); //cout<<name<<' '<<str<<endl; } //for(set_t::const_iterator p = s.cbegin();p!=s.cend();++p) //{ // //set_t t; // cout<<*p<<' '<<name<<endl; //} } typedef list<char*> ListType; typedef struct ListNode { char* groupName; ListType *next; }NodeType; typedef list<NodeType*> myList; typedef myList::iterator myIter; myIter myFind(myList& mylist, char* dest) { myIter it; for (it=mylist.begin(); it != mylist.end(); it++) { if( (*it)->groupName == dest) return it; } return it; } int main() { struct _finddata_t fileinfo; string in_path; string in_name; cin>>in_path; string curr = in_path+"\\*.txt"; long handle; if((handle=_findfirst(curr.c_str(),&fileinfo))==-1L) { cout<<"没有找到匹配文件!"<<endl; system("pause"); return 0; } else { in_name = in_path + "\\" + fileinfo.name ; GetLineAndPrint(in_name); while(!(_findnext(handle,&fileinfo))) { in_name = in_path + "\\" +fileinfo.name; GetLineAndPrint(in_name); } _findclose(handle); } myList classInfo; NodeType* pNode; //插入节点 for(size_t i=0; i<5; i++) { //创建一个索引节点 myIter it = myFind(classInfo, url[i].group); if( it!= classInfo.end() ) //已存在 { //存储name (*it)->next->push_back( url[i].name ); } else //创建新的NodeType节点 { pNode = new NodeType; pNode->groupName = url[i].group; pNode->next = new ListType; //创建list //存储当前的name pNode->next->push_back( url[i].name ); classInfo.push_back( pNode ); } } //输出: for (myIter it=classInfo.begin(); it != classInfo.end(); it++) { cout << (*it)->groupName << ": "; for ( ListType::iterator bg=(*it)->next->begin(); bg != (*it)->next->end(); bg++ ) { cout << (*bg) << "\t"; } cout << endl; } system("pause"); return 0; } ``` 可能我刚才说的不清楚,我是读取目录下的所有txt文件,每个.txt文件本身文件名是“搜索网站”或是“购物网站”等等。内容是 www.baidu.com www.goole.com www.baidu.com . . 这样的, 比如baidu可能出现在搜索网站.txt中,也可能出现在卖假药.txt中,而我最终目标输出是变成 www.baidu.com 搜索网站 卖假药网站 www.goole.com 搜索网站 . . 这种输出。
最近我公司的网站,服务器时间长了.就会报内存溢出.找不到原因
<p>最近我公司的网站,服务器时间长了,访问量变大.就会报内存溢出.找不到原因. <br />    在网上搜索了很多资料.关于java内存泄露方面的东西.我怀疑是我们java类中用了单例模式惹的祸.但还不敢确定. 我对单例模式,也只懂得一二.希望各位网友.可以讨论讨论.我希望能尽快找到解决方法. <br />    下面是我在网上搜索的一个关于单例模式,有内存泄露的帖子:http://java.csdn.net/page/bf856ae4-ef93-4355-b43d-3735cba92279</p> <p>     大概意思:</p> <pre name="code" class="java">单例模式。不正确使用单例模式是引起内存泄露的一个常见问题,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露,考虑下面的例子: class A{ public A(){ B.getInstance().setA(this); } .... } //B类采用单例模式 class B{ private A a; private static B instance=new B(); public B(){} public static B getInstance(){ return instance; } public void setA(A a){ this.a=a; } //getter... } 显然B采用singleton模式,他持有一个A对象的引用,而这个A类的对象将不能被回收。想象下如果A是个比较大的对象或者集合类型会发生什么情况。 </pre> <p>  </p> <p>我再贴出我项目中的java代码(提取出来的).供大家分析.</p> <pre name="code" class="java">import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.log4j.Logger; import com.viewbean.Mms; public class MyDBTest { Statement stmt= null; ResultSet res = null; private static final Logger logger = Logger.getLogger(Mms.class); private static final MyDBTest instance = new MyDBTest(); public static MyDBTest getInstance() { return instance; } private MyDBTest() { } /** * * @param con * @param a * @param b * @param c * @param i 调用sql语句的序号. * @return */ public String[][] getOs(java.sql.Connection con,String a,String b ,String c,int i ){ logger.debug("获取某某..."); String[] sql={ // 0. "select a from mysql where a ='"+b+"'", //1. "select a from mysql where b ='"+b+"'", //2. "select a from mysql where c ='"+c+"'" // sql语句都是 用 + 号拼起来的. }; try { stmt = con.createStatement(); res= stmt.executeQuery(sql[i]); //................ //对res进行其他操作.返回一个String[][]二维数组 } catch (SQLException e) { e.printStackTrace(); }finally{ try { if(stmt!=null) stmt.close(); if(res!=null) res.close(); //con 连接对象.在jsp中被关闭. } catch (SQLException e) { e.printStackTrace(); } sql=null; } return null;//实际返回二维数组.现在模式返回null; } public boolean deleteGif(java.sql.Connection conn,String aa) { logger.debug("删除某某..."); return false; } public void insertmms(java.sql.Connection con,String linkid,String id){ logger.debug("添加某某..."); } } </pre> <p> </p> <p> </p> <p>    由于是一个网站项目,没有很复杂的框架.应用了简单的jsp+javabean模式开发.</p> <p>   所以都是在jsp或者servlet中创建连接对象.然后调用这些java类.并且这些类都应用了单利模式.</p> <p>其他的jsp直接调用getInstance()方法.然后调用其中的方法.执行sql操作.并且连接对象是在jsp中try{}catch{}finally{}</p> <p> finally{}里中关闭里.所有jsp中的对象和String,String[][]都设置为null.</p> <p>   </p> <p>现在我的疑问就是:1.向我这种代码.javabean设置为单例模式,会不会有内存泄露的结果.</p> <p>                          2.我那是用了logger4j的对象,始终没有清空他.他应不应该进行logger =null 操作.</p> <p>                          3.还有拼sql 语句.有没有跟好的方法.</p> <p>                          4.在finally{} 将对象置为null  ,是不是真的内存回收了呢?</p> <p>   </p> <p> </p> <p>    </p><br /><strong>问题补充:</strong><br />我们项目应用了 数据库连接池.如果数据库连接池没有链接到,就用直连的. <br /> <br /> <br />我们获取Connection大多数在jsp中/比如: <br />&lt;%  <br />// 查询某用户的未读消息几条 <br />   Connection conn  =  null; <br />   String[][]  strNewCount=null; <br />   try{ <br />   conn  =  DBAccess.getPooledConnection(); <br /> strNewCount=MessageManageDao.getInstance().pageQueryMessage(conn,userId,-1,-1,0,2); <br /> if(strNewCount!=null&amp;&amp;strNewCount.length&gt;0){ <br />    newCounts= Integer.parseInt(strNewCount[0][0]); <br /> } <br /> }catch(Exception e){ <br /> e.printStackTrace();} <br />finally{ <br />DBAccess.closeConnection(conn); <br />} <br /> <br />%&gt; <br /> <br /> <br />在servlet里面的连接.都是写在doGet() 或 doPost() 方法里面的. <br /> <br /> <br />希望大家继续关注.... <br />      <br /><strong>问题补充:</strong><br />问题再次补充并进行我的分析: <br /> <br /> <br />回答,墓里活人: <br />    我那个页面不是专门用来获得连接.也没有其他页面包含他,我说的是,我用很多 jsp页面,这些页面如果要获取数据,进行操作.都是直接&lt;% %&gt; 在这个里面获取连接,并调用方法.获得String[][]返回或无返回值. <br />    获得的连接.在页面末尾的finally{} 块中关闭啦. <br />     <br />    单例.那个B类的构造方法,没有写那个private,我是copy别人的帖子中 <br /> <br />的.我猜是手误. <br /> <br />我的疑问: <br />  1. 如果我一个jsp页面,要调用很多dao类里的方法,为什么不把Connection 在页面获取呢,可以直接传到Dao类.这样不比在Dao类中的每个方法里面重新获取连接不更好吗? <br />   <br />   2.如果按照最上面的那个帖子的说法,采用单例模式的类里面如果有其他类的引用或对象,这些对象是不是永远不会销毁呢?这是内存泄露吗? <br /> <br /> <br /> <br /><br /><strong>问题补充:</strong><br />错别字更正:"我用很多 jsp页面"  ---&gt;&gt;&gt;  "我有很多jsp页面"
做了一个小时的面试题(没有过 希望大家帮忙答下 虽然很幼稚 毕竟每个人都是这么过来的吗 感激了!)
XX软件工程师笔试试题 注:1、请参考人员将答案写在答题纸上,勿将答案写在此卷上。 2、请参考人员将编号与姓名填写在答题纸上。 1、 以下数据结构中不属于线性数据结构的是()。 A、队列 B、线性表 C、二叉树 D、栈 我的答案:C 2、 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是()。 A、 可行性分析 B、需求分析 C、详细设计 D、程序编码 我的答案:B 3、 结构化程序设计主要强调的是()。 A、 程序的规模 B、程序的易读性 C、程序的执行效率 D、程序的可移植性 我的答案:C 4、 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段()。 A、 概要设计 B、详细设计 C、可行性分析 D、需求分析 我的答案:B 5、 下列关于栈的叙述中正确的是()。 A、 在栈中只能插入数据 B、在栈中只能删除数据 B、 栈是先进先出的线性表 D、栈是先进后出的线性表 我的答案:D 6、 下面不属于软件设计原则的是()。 A、 抽象 B、模块化 C、自底向上 D、信息隐蔽 我的答案:C 7、 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A、 N+1 B、N C、(N+1)/2 D、N/2 我的答案:C 8、 视图设计一般有3种设计次序,下列不属于视图设计的是()。 A、 自顶向下 B、由外向内 C、由内向外 D、自底向上 我的答案:C 9、下列有关数据库的描述,正确的是()。 A、数据库是一个DBF文件 B、数据库是一个关系 C、数据库是一个结构化的数据集合 D、数据库是一组文件 我的答案:C 10、下列说法中,不属于数据模型所描述的内容的是()。 A、数据结构 B、数据操作 C、数据查询 D、数据约束 我的答案:A 11、若按功能划分,软件测试的方法通常分为白盒测试方法和(黑盒测试方法)。 12、数据库系统的三级模式分别为(级联)模式、内部级模式与外部级模式。 13、在最坏情况下,冒泡排序的时间复杂度为(N+1/2)。 14、在面向对象方法中,信息隐蔽是通过对象的(封装)性来实现的。 15、关系模型的数据操纵既是建立在关系上的数据操纵,一般有(插入)、增加、删除、和修改四种操作。 16、TIME()的返回值的数据类型是(String)类型。 17、编写SQL语句 1)、创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话 我的答案: create table student( studentCardNo number(2) primary key, name char(10), age number(2), sex char(2) check(sex in (‘男’,’女’)), address varchar2(100), tel number(2) ) 2)、修改学生表的结构,添加一列信息,学历 我的答案: alter table student add(xueli varchar2(20)); 3)、修改学生表的结构,删除一列信息,家庭住址 我的答案: alter table student drop column address; 4)、向学生表添加如下信息: 学号 姓名 年龄 性别 联系电话 学历 1 A 22 男 123456 小学 2 B 21 男 119 中学 3 C 23 男 110 高中 4 D 18 女 114 大学 我的答案: insert into student values(‘&1’,’&2’,’&3’); 一次一次添加 5)修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” 我的答案: update student set xueli=”大专” where tel like 11%; 6)删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 我的答案: delete student where name like C% or sex=”男”; 7)查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号显示出来 我的答案: select name,studentCardNo from student where age<22 and xueli=”大专”; 8)查询学生表的数据,查询所有信息,列出前25%的记录 我的答案: select top*0.25 from student; 9)查询出所有学生的姓名,性别,年龄降序排列 我的答案: select name,sex,age from student where age desc; 10)按照性别分组查询所有的平均年龄 我的答案: select avg(age) from student group by sex; 18、什么是存储过程?为什么存储过程要比单纯的SQL语句执行起来要快? 我的答案: 存储过程算是一种优化查询需要比单存SQL语句执行的要快 19、两张关联表,删除主表中已经在副表中没有的信息 我的答案 delete from fubiao a where a.fid not in(select id from zhubiao) 20、程序题: 用1、2、2、3、4、5这六个数字,用java或你熟悉的语言,打印出所有不同的排列,如:512234、412345等,要求:“4”不能再第三位,“3”与“5”不能相连。并将这些数据按从小到大输出。 我的答案 我的写的不好 没贴下 笔试的时候没写全 21、String 和 StringBuffer的区别 我的答案 String定长 StringBuffer 变长 22、&和&&的区别 我的答案 &短路与 &&逻辑与 网上答案: & 是位运算符,表示按位与运算, && 是逻辑运算符,表示逻辑与(and)。 23、final,finally,finalize的区别 我的答案 Final静变量关键字,finally异常关键字,finalize 网上答案 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法, 可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 24、数组有没有length()这个方法?String有没有length()这个方法? 我的答案: 数组没有length()这个方法,有length的属性。 String有length()这个方法。 25、是否可以继承String类? 我的答案: 不可以 解释的很乱 26、说出数据连接池的工作机制是什么? 我的答案: 反正解释的很乱我感觉 27、垃圾回收的优点和原理。并考虑2种回收机制。 我的答案: 动态回收 解释的很乱 网上答案: Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解, 它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念, 只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。 垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有 使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 28、你所知道的集合类都有哪些?区别?主要方法? 我的答案: Arraylist 非线性的、Vertor线性的 29、JSP的内置对象及方法。 我的答案: Page,exception,out,page content,application,request,reponse,session,config 30、页面间对象传递的方法。 我的答案: 那几个方法都写错了 31、你知道Request对象的主要方法有哪些? 32、J2EE是技术还是平台还是框架? 我的答案: J2EE是技术也是平台 网上答案: J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。 J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。 33、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种(例如GBK编码类型)编码的字符串? Request encording(“GBK”) 34、j2ee常用的设计模式?说明工厂模式。 Gof23种设计模式 工厂模式:Factory 网上答案: Java中的23种设计模式: Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), Observer(观察者模式), State(状态模式), Strategy(策略模式), Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例, 通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。 首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。 然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。 当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。 35、JSP四种会话跟踪技术 我的答案: Application cookie session 36、排序都有哪几种方法?请举例 冒泡 选择 快序 二分查找 网上答案: 排序的方法有:插入排序(直接插入排序、希尔排序), 交换排序(冒泡排序、快速排序), 选择排序(直接选择排序、堆排序), 归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。 //使用快速排序方法对a[ 0 :n- 1 ]排序 从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点 把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点 递归地使用快速排序方法对left 进行排序 递归地使用快速排序方法对right 进行排序 所得结果为l e f t + m i d d l e + r i g h t 37、关于模块间的设计原则? 规范要一样 38、项目过程一般是怎样的?你参加过几个项目开发?参加过的项目流程是怎样的?自己负责与人合作工作内容及自我评价? 从需求调研——设计开发——实施 参加过网站的实施 模板的制作 39、tomcat自动关闭常见原因? 我的答案: 现在没遇到过 40、如何设置TOMCAT内存和连接数? 我的答案: Tomcat群集 41、你如何理解Tomcat是什么? 我的答案: Tomcat是JSP Servlet 容器恰当的说 42、静态变量和实例变量的区别? 我的答案: 静态变量域用final修饰,每次都被调用 实例变量则不会 43、IE、FF下面CSS的解释区别 我的答案: 自己编的 44、web前端技术你了解哪些技术? 我的答案: JAVAScript,CSS,DIV,Ajax,Ajax框架,DWR,dojo,jguery 45、什么是报表?什么是报表控件,作用是什么?你了解哪些报表工具? 我的答案: 解释的很乱 46、你了解的那些统计图表类型? 我的答案: 自己编的 47、Flex与数据库连接的三种方式? 我的答案: 自己编的 ------------------------------------------------------- 我答错的、 错在哪里? 没答上的帮忙解答下? 感激了 !
3年swing,1年JavaEE,1年java socket转android什么待遇
3年swing,技能除了跟做游戏的比足够了。做过IM 3款,手术X光机客户端1款,线程是我的强项,过度Android有绝对的自信。 <br />1年JavaEE,spring struts都摸过,腻外了 <br />1年java服务器开发,做过的项目包括网关、邮件服务器、金融信息发布、用过纯socket,MIMA框架,设计过协议,也熟悉一些协议比如sip、xmpp、activesync、webdav等等,http更不用说。写过点C代码,不多,JNI调用。 <br />在外企干过2年,目前做手机服务器端。 <br /> <br />如果转Android,能给什么价格。听说android动辄就10k?有那么值钱么 <br />主要和市场升温有关吧,android诞生2007年底,企业用人都是1年android开发经验。 <br />android人才紧缺是不是?<br/><strong>问题补充</strong><br/><div class="quote_title">proper 写道</div><div class="quote_div">Android没那么值钱的... <br /> <br />show一下你的app,然后再讨论工资... <br /> <br /></div> <br /> <br />package com.xxx.framework.components.transport.socket.codec; <br /> <br />import java.nio.ByteOrder; <br />import org.apache.mina.common.ByteBuffer; <br />import org.apache.mina.common.IoSession; <br />import org.apache.mina.filter.codec.CumulativeProtocolDecoder; <br />import org.apache.mina.filter.codec.ProtocolDecoderOutput; <br /> <br />/** <br /> * 新华社系统Socket通信协议解码器。具体协议信息参见《xxx》。 <br /> * 解码器的解码时机由MINA框架决定,一般地:客户端发来的二进制消息先是经过协议解码器处理,即doDecode方法; <br /> * 解码器处理、过滤、封装后抛给下一层解码器(如果存在);最后由最终的解码器抛给应用层的Handler处理具体业务逻辑。 <br /> * 总之,解码器的责任是将网络直接发送来的原始的二进制数据封装成应用层能识别的特定类对象,并上抛给应用层。 <br /> * 上抛的过程由解码器方法参数ProtocolDecoderOutput的write方法完成。 <br /> * 注意:为配合与多种异构客户端的通信,规定:协议解码的字节序是从最低有效位到最高有效位。 <br /> * <br /> * @author xxx <br /> */ <br />final class UploadDecoder extends CumulativeProtocolDecoder { <br /> <br />&nbsp;&nbsp;&nbsp; /** <br />&nbsp;&nbsp;&nbsp;&nbsp; * 覆盖超类的回调方法完成自定义协议解码,该方法由MINA框架负责调用 <br />&nbsp;&nbsp;&nbsp;&nbsp; * @param session IoSession对象,由框架创建 <br />&nbsp;&nbsp;&nbsp;&nbsp; * @param ioBuffer 存储原始二进制数据的缓冲区,由框架创建 <br />&nbsp;&nbsp;&nbsp;&nbsp; * @param out ProtocolDecoderOutput对象,由框架创建 <br />&nbsp;&nbsp;&nbsp;&nbsp; * @return 返回true,当且仅当缓冲区内有可以解析的数据而你需要再次调用doDecode时;返回false,如果缓冲区内其余的数据不足以进行解析, <br />&nbsp;&nbsp;&nbsp;&nbsp; * 然后当有更多的数据积累到缓冲区时doDecode方法会再次被通知。 <br />&nbsp;&nbsp;&nbsp;&nbsp; * @throws Exception <br />&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp; @Override <br />&nbsp;&nbsp;&nbsp; protected boolean doDecode(IoSession session, ByteBuffer ioBuffer, ProtocolDecoderOutput out) throws Exception { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ioBuffer.order(ByteOrder.LITTLE_ENDIAN); // 修改缓冲区的字节顺序为little-endian,按照此顺序,多字节值的字节顺序是从最低有效位到最高有效位的。 <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 根据新华社系统Socket通信协议规范,协议由两部分构成:消息头与消息体。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 其中消息头长度恒定为17字节;消息体长度不定,由消息头前4个字节给出。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 因此解析一条由客户端上传的消息需要2个步骤:获取并解析消息头;获取并解析消息体。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Upload request = (Upload) session.getAttribute("xhs-upload"); // 从session对象中获取“xhs-upload”属性值 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (request == null) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果request对象是null,则表示是解析消息头的阶段。如果是消息刚刚接收到即解析的是新消息,request对象一定是在session中不存在的。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ioBuffer.remaining() &gt;= 17) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 检查缓冲区可用字节个数是否大于等于17。因为根据协议规定,消息头的长度恒定为17, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 分别是消息长度4字节、客户端标识11字节、命令标识1字节、zip压缩标识1字节。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果大于等于17,就表明有足够的数据来解析消息头了。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int totalLength = ioBuffer.getInt(); // 读取缓冲区前4个字节合并为一个整型,该值受字节序的影响,但是规定字节序是从最低有效位到最高有效位 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] clientIdentify = new byte[11]; // 创建11字节容量的数组容纳客户端标识 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ioBuffer.get(clientIdentify); // 从缓冲区读取11个字节的数据填充进数组 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte command = ioBuffer.get(); // 从冲缓冲区读取1字节作为命令标识 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte zip = ioBuffer.get(); // 从冲缓冲区读取1字节作为zip压缩标识 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request = UploadFactory.createUpload(command); // 根据命令的类型创建适当的请求 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.messageTotalSize = totalLength; // 设置请求的消息长度 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.clientIdentify = new String(clientIdentify); // 设置请求的客户端标识属性 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.zip = (zip != (byte) 0); // 设置请求的zip压缩标识属性,当且仅当数值 0 代表非压缩 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 向session添加标识键为“xhs-upload”的属性,将请求对象作为属性值传入。这有两个作用: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 1、将xhs-upload键设置成有值状态,代表消息头已经解析完成。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 2、将之前解析出来的消息长度、客户端标识、命令标识、zip压缩标识等信息封装进请求对象暂时存储到session对象中,以便下次调用doDecode方法时利用。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 注意:这时消息应该缺少消息体部分。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute("xhs-upload", request); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 因为当消息头解析完成后,这时缓冲区内可能还有足够的积累数据可以继续解析消息体甚至下一条消息(也可能没有),返回true使框架再次调用doDecode方法。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 即使缓冲区内没有足够的数据了,也应该留给下次调用doDecode方法时去判断。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果缓冲区可用字节个数不足15个,直接返回false告诉框架不要再回调doDecode方法,直到网络获取到数据压进缓冲区时再调用。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果request对象不是null,则表示是消息头已经解析完成并存储,目前是解析消息体阶段。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int bodyLength = request.messageTotalSize - 17; // 取得消息体的长度,即消息的总长度 - 消息头的长度(17) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ioBuffer.remaining() &gt;= bodyLength) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 检查缓冲区的可用字节数是否大于等于消息体长度,即是否读取到消息体了。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] messageBody = new byte[bodyLength]; // 创建定长的数组存放消息体 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ioBuffer.get(messageBody); // 从缓冲区中读取bodyLength字节的数据填充进数组 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.messageBody = messageBody; // 设置请求的消息体 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 将session对象的“xhs-upload”键及其对应的属性值移除从而: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 1、将xhs-upload键设置成无值状态,代表消息体已经解析完成。再次进入等待解析消息头阶段 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 2、释放存储“xhs-upload”键的属性值占用的内存。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.removeAttribute("xhs-upload"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 将解码后生成的请求对象对象抛给位于应用层的Handler处理,或者抛给下一层解码器(如果存在)。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(request); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 因为当一条完整消息解析完成后,这时缓冲区内可能还有足够的积累数据可以继续解析下一条消息(也可能没有),返回true使框架再次调用doDecode方法。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 即使缓冲区内没有足够的数据了,也应该留给下次调用doDecode方法时去判断。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果缓冲区内可用字节个数不足以构成完整的消息体,直接返回false告诉框架不要再回调doDecode方法,直到网络获取到数据压进缓冲区时再调用。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; } <br />} <br /> <br />新闻发布程序的MINA解码器,别被注释吓死 <br /><br/><strong>问题补充</strong><br/><div class="quote_title">javagui 写道</div><div class="quote_div"> <br /> <br />应该是MINA把。 <br /></div> <br /> <br />拼错了,是Apache MINA,本来是想用xsocket来着,但是xsocket人气没MINA高 <br />
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
MySQL数据库总结
文章目录一、数据库简介二、MySQL数据类型(5.5版本)三、Sql语句(1)Sql语句简介(2)数据定义语言DDLcreate,alter,drop(3)数据操纵语言DMLupdate,insert,delete(4)数据控制语言DCLgrant,revoke(5)数据查询语言DQLselect(6)分组查询与分页查询group by,limit四、完整性约束(单表)五、多表查询六、MySQL数
记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背
有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好。想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着”背“来记忆的,所以今天的这篇文章,讲给大家详细着讲解他们是如何通信的,让大家尽量能够理解他们之间的区别、优缺点等,这样的话,以后面试官让你举例子,你也能够顺手拈来。 1、管道 我们来看一条 Linux 的语句 netstat -tulnp | gr...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片
走进高并发(二)Java并行程序基础
一、进程和线程 在操作系统这门课程中,对进程的定义是这样的: 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进行是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。 上面的定义很完整,对进程进行了全方面的定义,但是貌似进程是看不见摸不着的一个东西,实际上,我们可以通过查看计算...
程序设计的5个底层逻辑,决定你能走多快
阿里妹导读:肉眼看计算机是由CPU、内存、显示器这些硬件设备组成,但大部分人从事的是软件开发工作。计算机底层原理就是连通硬件和软件的桥梁,理解计算机底层原理才能在程序设计这条路上越走越快,越走越轻松。从操作系统层面去理解高级编程语言的执行过程,会发现好多软件设计都是同一种套路,很多语言特性都依赖于底层机制,今天董鹏为你一一揭秘。 结合 CPU 理解一行 Java 代码是怎么执行的 根据冯·诺...
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问