天码营的教程好吗,买这个值不值啊,求各位大

求各位,大河湾遗址值不值的去玩啊,名声挺大_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
求各位,大河湾遗址值不值的去玩啊,名声挺大
我有更好的答案
进一步提升西安的城市特色好玩4它是国际古遗址理事会确定的具有世界意义的重大遗址保护工程、大遗址保护和改善民生的重点工程:好玩1唐大明宫是东方园林建筑艺术的杰出代表、最重要的人文象征,并成为世界文明古都的重要支撑大明宫国家遗址公园的4大好玩特色,西安的“城市中央公园”好玩3成为西安未来城市发展的生态基础,被誉为丝绸之路的东方圣殿好玩2大明宫国家遗址公园是西安城市建设
采纳率:95%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包David | 天码营 - 实战开发技术学习服务平台
北京大学 - 教师,北京大学 - 计算机软件与理论博士
北京大学青年教师,从事软件工程、大数据与人工智能的研究与教育
public class Main {
public String intToRoman(int num) {
String digit = {"", "I", "II", "III", "IV", "V", "VI", "VII",
String ten = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX",
String hundred = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC",
public static void main(String args) {
&public class Main {&&
& & public String intToRoman(int num) {&&
& & & & String digit[] = {"", "I", "II", "III", "IV", "V", "VI", "VII",&&
& & & & & & & & "VIII", "IX"};&&
& & & & String ten[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX",&&
& & & & & & & & "XC"};&&
& & & & String hundred[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC",&&
& & & & & & & & "DCCC", "CM"};&&
& & & & String thousand[] = {"", "M", "MM", "MMM"};&&
& & & & String str = "";&&
& & & & return str + thousand[num / 1000] + hundred[num % 1000 / 100] + ten[num % 100 / 10] + digit[num % 10];&&
& & public static void main(String[] args) {&&
& & & & System.out.print(new Main().intToRoman(3999));&&
在答疑区,代码区和QQ群都可以提问
在答疑区,代码区和QQ群都可以提问
Google一下: .hk/search?q=exitcode%3D13 .hk/search?q=exitcode%3D13 不能翻墙的话,百度: /s?wd=exitcode%3D13 /s?wd=exitcode%3D13 出错原因是eclipse和你电脑上安装的JDK版本不匹配。 1. 如果你是32位的操作系统。 检查安装JDK是否是32位, JDK环境变量是否已经正确配置。 检查方法: cmd 输入 java version 2. 64位的操作系统,中出现该错误,是因为eclipse 的JDK要是32位的,重新安装32位的JDK,并配置环境变量。64位操作系统,支持JDK32 和 64位的。 32位的JDK安装目录是: program Files(X86) 64位的JDK安装目录是: program Files
Google一下:不能翻墙的话,百度:出错原因是eclipse和你电脑上安装的JDK版本不匹配。如果你是32位的操作系统。 检查安装JDK是否是32位, JDK环境变量是否已经正确配置。检查方法: cmd &输入 & java -version64位的操作系统,中出现该错误,是因为eclipse 的JDK要是32位的,重新安装32位的JDK,并配置环境变量。64位操作系统,支持JDK32 和 64位的。32位的JDK安装目录是: program Files(X86)64位的JDK安装目录是: program Files
点击头像 我的主页 代码
点击头像-&我的主页-&代码
开通课程后有以下服务: 不仅仅有参考代码,还有精心设计的代码任务,帮助你掌握核心知识点,真正学会实战中如何应用 不仅仅是可以向老师提问,老师可以针对你的代码给出专业的建议 可以加入答疑群,和老师同学们交流
开通课程后有以下服务:不仅仅有参考代码,还有精心设计的代码任务,帮助你掌握核心知识点,真正学会实战中如何应用不仅仅是可以向老师提问,老师可以针对你的代码给出专业的建议可以加入答疑群,和老师同学们交流
其实这个问题问的就是浮点数的二进制表示,以float为例: 首先要了解什么是科学计算法,尾数是在1到10之间的。 12345 = 1.2345 10 ^ 4 这里1.2345就是尾数。 这是十进制,计算机中表示为二进制: 12345 = 3.0139 2 ^ 12 这里尾数是3.0139(不完全准确,有精度问题) 浮点数的三部分就分别要表示出: 符号:为正 指数位:12 尾数:3.0139(这里有23位bit去逼近最接近的数,能精确到十进制7到8位小数点) 这几个数分别映射到三个部分的bit位(具体规则还有一些移位和加减数的操作),就是对应的float的二进制表示了。 这里细节依然还有很多。刚学Java基础大可不必深究这方面的知识,如果希望了解更多浮点数的表示,推荐《深入计算机系统:程序员的观点》,有一章专门讲浮点数。
其实这个问题问的就是浮点数的二进制表示,以float为例:首先要了解什么是科学计算法,尾数是在1到10之间的。12345 = 1.2345 * 10 ^ 4这里1.2345就是尾数。这是十进制,计算机中表示为二进制:12345 = 3.0139 * 2 ^ 12这里尾数是3.0139(不完全准确,有精度问题)浮点数的三部分就分别要表示出:符号:为正指数位:12尾数:3.0139(这里有23位bit去逼近最接近的数,能精确到十进制7到8位小数点)这几个数分别映射到三个部分的bit位(具体规则还有一些移位和加减数的操作),就是对应的float的二进制表示了。这里细节依然还有很多。刚学Java基础大可不必深究这方面的知识,如果希望了解更多浮点数的表示,推荐《深入计算机系统:程序员的观点》,有一章专门讲浮点数。
Spring Boot自动部署和刷新 /spring basics+spring boot blog 3
回答了 匿名用户:
找一份满意的工作,要看这个“满意”怎么定义。我招一个Java程序员,大概会这样来考察一个人。 1、至少你得过了笔试或者网上的编程测试吧。面试机会先拿到。既然目标是比较好的Offer,一般还是会考察你CS基础知识的。去看看各个公司的笔试题,网上到处是。算法和CS核心课程你还是应该去复习的。 2、喜欢编程的人,大都会折腾个Github项目之类的,哪怕是个简单的博客应用,如果我看到你会去捣鼓这些东西的话,我会认为你是一个有编程热情的人,很加分。 3、有一两个做得深入的项目很加分,去争取参与实际项目机会,身边有这样喜欢折腾的朋友那就再好不过了。实在找不到自己去实现一个网站或者App,部署或者分发出来,活生生的东西可以增加说服力。找个项目创意还是很容易,没这方面Sense,山寨也行。 4、除编程之外,有一两种你深入理解和掌握的技术,比如Java求职的话,你对Spring的整套体系甚至源码理解很深入可以大大加分。技术涉猎比较广泛的人,是比较受欢迎的。 5、赶紧找实习吧,实习进入好公司的门槛相对低一些,积累经历的同时,内推也更有机会。 6、最后,可以做一做天码营的
找一份满意的工作,要看这个“满意”怎么定义。我招一个Java程序员,大概会这样来考察一个人。1、至少你得过了笔试或者网上的编程测试吧。面试机会先拿到。既然目标是比较好的Offer,一般还是会考察你CS基础知识的。去看看各个公司的笔试题,网上到处是。算法和CS核心课程你还是应该去复习的。2、喜欢编程的人,大都会折腾个Github项目之类的,哪怕是个简单的博客应用,如果我看到你会去捣鼓这些东西的话,我会认为你是一个有编程热情的人,很加分。3、有一两个做得深入的项目很加分,去争取参与实际项目机会,身边有这样喜欢折腾的朋友那就再好不过了。实在找不到自己去实现一个网站或者App,部署或者分发出来,活生生的东西可以增加说服力。找个项目创意还是很容易,没这方面Sense,山寨也行。4、除编程之外,有一两种你深入理解和掌握的技术,比如Java求职的话,你对Spring的整套体系甚至源码理解很深入可以大大加分。技术涉猎比较广泛的人,是比较受欢迎的。5、赶紧找实习吧,实习进入好公司的门槛相对低一些,积累经历的同时,内推也更有机会。6、最后,可以做一做天码营的
这样做当然真的好,是一种良好的编程习惯。 final 表示该参数不能被改变,基本类型表示不能改变值,引用类型表示不能改变引用(始终指向同一个对象),引用的对象本身可以修改。 你定义一个方法的接口时,如果在你的业务场景下,你认为传入的某个参数不应该被修改,就加上 final 修饰。 在你实现方法的时候(或者可能是另外一个人来实现方法),有可能会不小心忽略了这个假设,去修改了这个变量,此时就会有编译错误。从这个角度来说,这是一种帮助你减少错误的好的编程习惯。
这样做当然真的好,是一种良好的编程习惯。final表示该参数不能被改变,基本类型表示不能改变值,引用类型表示不能改变引用(始终指向同一个对象),引用的对象本身可以修改。你定义一个方法的接口时,如果在你的业务场景下,你认为传入的某个参数不应该被修改,就加上final修饰。在你实现方法的时候(或者可能是另外一个人来实现方法),有可能会不小心忽略了这个假设,去修改了这个变量,此时就会有编译错误。从这个角度来说,这是一种帮助你减少错误的好的编程习惯。
回答了 匿名用户:
仅仅看不行,需要手动去写。会一步一步给你任务,让你去完成,提供必要的参考代码,并且在你遇到问题的时候给你提供帮助。
仅仅看不行,需要手动去写。会一步一步给你任务,让你去完成,提供必要的参考代码,并且在你遇到问题的时候给你提供帮助。
谢谢你的关注。iOS课程我们会更新,但是时间还不确定,现在人手暂时跟不上。
谢谢你的关注。iOS课程我们会更新,但是时间还不确定,现在人手暂时跟不上。
可以改成这样 我的空间
可以改成这样
&a class="btn" target="blank" href="http://user.//main"&
&i class="fa fa-bars"&&/i& 我的空间
有更多出错信息吗?
有更多出错信息吗?
谢谢邀请 已经签了几本书,最近暂时没时间写更多东西了,抱歉。
谢谢邀请&已经签了几本书,最近暂时没时间写更多东西了,抱歉。
回答了 匿名用户:
试试 spring.thymeleaf.mode=LEGACYHTML5
试试spring.thymeleaf.mode=LEGACYHTML5
回答了 匿名用户:
您给的信息太少,这里有一个跟JIRA类似的应用,供你参考:
您给的信息太少,这里有一个跟JIRA类似的应用,供你参考:
回答了 匿名用户:
这篇文章讲的 Spring的事务 /tutorial/spring transaction
这篇文章讲的
回答了 匿名用户:
用CSS控制图片大小是最简洁有效的方法。设置其width和height即可。一般width设为100%。 当然图片的比例不合适的话形变是不可避免的。
用CSS控制图片大小是最简洁有效的方法。设置其width和height即可。一般width设为100%。 当然图片的比例不合适的话形变是不可避免的。&
回答了 匿名用户:
前端游戏代码偏简单,作为项目确实不太合适,但是里面涉及的知识真的融会贯通的话也很厉害的。以前Hattle跟面试官过招的时候就拿装B游戏中的知识点说事,很有说服力。不过如果你从这两个前端游戏中也可以扩展出很漂亮的项目的。 Java Web和Node的项目作为本科生的普通项目足够了,从面试的角度来说,关键的问题在于项目中涉及到的技术栈你都比较熟练的掌握。 此外这两个项目看似简单,但是当把系统设计、缓存、消息、读写分离等等一些知识点能够应用进来的时候,做到一定的深度,就是很出彩的项目。 你不妨了解一下TinyURL这个项目,看起来非常简单,但是真正做好就是一个很不错的项目,涉及到你各方面的能力。
前端游戏代码偏简单,作为项目确实不太合适,但是里面涉及的知识真的融会贯通的话也很厉害的。以前Hattle跟面试官过招的时候就拿装B游戏中的知识点说事,很有说服力。不过如果你从这两个前端游戏中也可以扩展出很漂亮的项目的。Java Web和Node的项目作为本科生的普通项目足够了,从面试的角度来说,关键的问题在于项目中涉及到的技术栈你都比较熟练的掌握。此外这两个项目看似简单,但是当把系统设计、缓存、消息、读写分离等等一些知识点能够应用进来的时候,做到一定的深度,就是很出彩的项目。你不妨了解一下TinyURL这个项目,看起来非常简单,但是真正做好就是一个很不错的项目,涉及到你各方面的能力。
回答了 匿名用户:
有可能是你import错误哦了,本来应该是 java.util.List ,估计你是在Eclipse自动修复的时候选择了引入 java.awt.List ,这不是一个泛型类,所以报错了。
有可能是你import错误哦了,本来应该是java.util.List,估计你是在Eclipse自动修复的时候选择了引入java.awt.List,这不是一个泛型类,所以报错了。
回答了 匿名用户:
【Window】 【Show View】 【Project Explorer】
【Window】-&【Show View】-&【Project Explorer】
就在教程中的参考代码中啊
就在教程中的参考代码中啊
回答了 匿名用户:
假设有如下代码: test /div } 这里 width:100% , p 内容的宽度为 100px (充满 div ),这个宽度是不包含边距、边框的,因此会出现滚动条。 如果是: p{ width: padding:10 } width:auto 表示内容+内边距+边框+外边距等于父元素内容宽度,所以这里它的 width 实际是 80px ,不会出现滚动条。
假设有如下代码:&div&
&p&test&/p&
width:100%;
padding:10
这里width:100%,p内容的宽度为100px(充满div),这个宽度是不包含边距、边框的,因此会出现滚动条。如果是:p{
padding:10
width:auto表示内容+内边距+边框+外边距等于父元素内容宽度,所以这里它的width实际是80px,不会出现滚动条。
回答了 匿名用户:
内存溢出,解决方法是加大内存修改Tomcat的启动时JVM的参数。 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在Web服务器对JSP进行预编译的时候。如果用了大量的第三方jar, 其大小超过了JVM默认的大小(4M)那么就会产生此错误信息了。 可以这样修改参数:手动设置 MaxPermSize 大小修改TOMCAT_HOME/bin/catalina.sh 在 echo "Using CATALINA_BASE: $CATALINA_BASE" 上面加入以下行: JAVA_OPTS=" server XX:PermSize=64M XX:MaxPermSize=128m 也可以尝试将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少JAR重复占用内存的目的。 或者换个JVM实现试试吧。
内存溢出,解决方法是加大内存修改Tomcat的启动时JVM的参数。PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在Web服务器对JSP进行预编译的时候。如果用了大量的第三方jar, 其大小超过了JVM默认的大小(4M)那么就会产生此错误信息了。可以这样修改参数:手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 也可以尝试将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少JAR重复占用内存的目的。或者换个JVM实现试试吧。
回答了 匿名用户:
模板引擎,就是将HTML模板渲染出最终样子的工具。 把动态把数据填充到HTML里面,可以在服务器端做,也可以在浏览器端做 比如angular会根据取到的数据去填充{{}}}里的内容,这是在客户端完成的。 比如JSP会在服务器端去填充{$}里的内容,然后把最终的html送到浏览器,这是服务器端完成的 有时候前后端模板引擎会同时使用,即使有前端的模板引擎,后端返回HTML有时也是需要的,不仅仅返回是JSON数据
模板引擎,就是将HTML模板渲染出最终样子的工具。把动态把数据填充到HTML里面,可以在服务器端做,也可以在浏览器端做比如angular会根据取到的数据去填充{{}}}里的内容,这是在客户端完成的。比如JSP会在服务器端去填充{$}里的内容,然后把最终的html送到浏览器,这是服务器端完成的有时候前后端模板引擎会同时使用,即使有前端的模板引擎,后端返回HTML有时也是需要的,不仅仅返回是JSON数据
回答了 匿名用户:
原则上讲,HTML中尽量不添加内容无关的标签。图片如果是背景用途最好的实现方式是使用CSS background。 另外button显示效果用CSS设置可以有较好的兼容性和性能。
原则上讲,HTML中尽量不添加内容无关的标签。图片如果是背景用途最好的实现方式是使用CSS background。另外button显示效果用CSS设置可以有较好的兼容性和性能。
回答了 匿名用户:
在POM文件中增加下面的配置: maven assembly plugin fully.qualified.MainClass jar with dependencies make assembly package single
在POM文件中增加下面的配置:&plugin&
&artifactId&maven-assembly-plugin&/artifactId&
&configuration&
&manifest&
&mainClass&fully.qualified.MainClass&/mainClass&
&/manifest&
&/archive&
&descriptorRefs&
&descriptorRef&jar-with-dependencies&/descriptorRef&
&/descriptorRefs&
&/configuration&
&executions&
&execution&
&id&make-assembly&/id&
&phase&package&/phase&
&goal&single&/goal&
&/execution&
&/executions&
是IBAction吗? 你删掉后,重新connect一下试试。
是IBAction吗? 你删掉后,重新connect一下试试。
回答了 匿名用户:
属性设置为私有是面向对象封装的基本实践,需要访问属性时就需要setter和getter。 getter和setter还有很多其它的好处,因为它们是方法,可以隐藏内部的数据接口,可以增加其他的逻辑,也可以作为实现某个特定接口的方法。 使用getter和setter相比直接使用公有的属性,能够有更大的灵活性,将来类的内部结构修改时,可以降低对外部的影响。
属性设置为私有是面向对象封装的基本实践,需要访问属性时就需要setter和getter。getter和setter还有很多其它的好处,因为它们是方法,可以隐藏内部的数据接口,可以增加其他的逻辑,也可以作为实现某个特定接口的方法。使用getter和setter相比直接使用公有的属性,能够有更大的灵活性,将来类的内部结构修改时,可以降低对外部的影响。
回答了 匿名用户:
一般情况下是使用反射。通过反射API将私有方法设置为可访问,然后使用 Method 的 invoke() 函数进行方法调用。比如: Method method = clazz.getDeclaredMethod(methodName, argClasses); method.setAccessible(true); return method.invoke(targetObject, argObjects);
一般情况下是使用反射。通过反射API将私有方法设置为可访问,然后使用`Method`的`invoke()`函数进行方法调用。比如:Method method = clazz.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
TextView textView = (TextView)findViewById(R.id.textView); TextView textView2 = (TextView)findViewById(R.id.textView2); 要放在 setContentView(R.layout.linearlayout); 之后才能调用。
TextView textView = (TextView)findViewById(R.id.textView);
TextView textView2 = (TextView)findViewById(R.id.textView2);
要放在setContentView(R.layout.linearlayout);
之后才能调用。
回答了 匿名用户:
引用官方文档的一个表: Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier(default) Y Y N N private Y N N N简单解释一下: 比如表中第二行第二列为Y,表示类可以访问public修饰的元素(类,方法,或者属性) 比如表中第三行第五列为N,表示外部(World)不能访问protected修饰的元素
引用官方文档的一个表:ModifierClassPackageSubclassWorldpublicYYYYprotectedYYYNno modifier(default)YYNNprivateYNNN简单解释一下:比如表中第二行第二列为Y,表示类可以访问public修饰的元素(类,方法,或者属性)比如表中第三行第五列为N,表示外部(World)不能访问protected修饰的元素
举个例子,假如 try{..} 内部包含5条语句,第三条抛出异常后,后面两条语句就不会执行了。 而 finally 中的语句,是无论如何都会执行的。比如, finally 中会进行关闭IO,释放资源之类的操作,这样才能确保发生异常的情况下执行这些必要的清理工作。
举个例子,假如try{..}内部包含5条语句,第三条抛出异常后,后面两条语句就不会执行了。而finally中的语句,是无论如何都会执行的。比如,finally中会进行关闭IO,释放资源之类的操作,这样才能确保发生异常的情况下执行这些必要的清理工作。
回答了 匿名用户:
运用forward方法只能重定向到同一个Web应用程序中的URL,而sendRedirect方法可以重定向到任何URL。 forward重定向后,浏览器url是地址不变的。sendRedirect转发后,浏览器url地址变为目的url地址。 forward是服务器端跳转,只有一次浏览器请求,调用者(原URL请求)与被调用者(目标URL请求)之间共享Request和Response。sendRedirect是客户端跳转,经历两次浏览器服务器请求,Request和Response不是共享的。
运用forward方法只能重定向到同一个Web应用程序中的URL,而sendRedirect方法可以重定向到任何URL。forward重定向后,浏览器url是地址不变的。sendRedirect转发后,浏览器url地址变为目的url地址。forward是服务器端跳转,只有一次浏览器请求,调用者(原URL请求)与被调用者(目标URL请求)之间共享Request和Response。sendRedirect是客户端跳转,经历两次浏览器服务器请求,Request和Response不是共享的。
str1 += "def" 等价于 String str1 = str1 + "def" 。 str1 + "def" 会产生新一个新的 String 对象, str1 指向(或者说引用)这个新的对象。 类似地: str1 = str1.substring(0,1); 也是让 str1 指向一个新的对象。 为了和 StringBuffer 做一个类比,你可以理解一下下面这段代码: String string = "abc"; String string2 = string += "edf"; System.out.println(string == string2); // 这里是false,string此时指向了不同的对象,string2指向原来那个不可改变的对象 StringBuffer buffer = new StringBuffer("abc"); StringBuffer buffer2 = buffer = buffer.append("edf"); System.out.println(buffer == buffer2); // 这里是true
str1 += "def"等价于String str1 = str1 + "def"。str1 + "def"会产生新一个新的String对象,str1指向(或者说引用)这个新的对象。类似地:str1 = str1.substring(0,1);也是让str1指向一个新的对象。为了和StringBuffer做一个类比,你可以理解一下下面这段代码:String string = "abc";
String string2 =
string += "edf";
System.out.println(string == string2);
// 这里是false,string此时指向了不同的对象,string2指向原来那个不可改变的对象
StringBuffer buffer = new StringBuffer("abc");
StringBuffer buffer2 =
buffer = buffer.append("edf");
System.out.println(buffer == buffer2); // 这里是true
回答了 匿名用户:
因为这个类实现了 java.io.Serializable 接口,实现这个接口一般是因为要序列化和反序列化。 每一个实现了 java.io.Serializable 接口在运行时都会生成一个 serialVersionUID 作为版本号,如果没有自己定义系统会自动生成。 如果你的程序涉及到基于序列化来生成和存储对象,则这个版本号是需要的,这能确保序列化和反序列化的版本是一致。而且类的版本更新的时候,你也应该更新 serialVersionUID 。 大多数情况下,使用一个默认值即可,比如通过Eclipse自动生成,在Eclipse中应该是 1 。
因为这个类实现了java.io.Serializable接口,实现这个接口一般是因为要序列化和反序列化。每一个实现了java.io.Serializable接口在运行时都会生成一个serialVersionUID作为版本号,如果没有自己定义系统会自动生成。如果你的程序涉及到基于序列化来生成和存储对象,则这个版本号是需要的,这能确保序列化和反序列化的版本是一致。而且类的版本更新的时候,你也应该更新serialVersionUID。大多数情况下,使用一个默认值即可,比如通过Eclipse自动生成,在Eclipse中应该是1。
回答了 匿名用户:
Integer a =Integer.valueOf("123");int b =Integer.parseInt("123");
Integer a = Integer.valueOf("123");
int b = Integer.parseInt("123");
回答了 匿名用户:
主要是出于安全方面的考虑。 String 是不可修改的对象, String 的任何操作都会产生新的对象,原来的对象在垃圾回收之前就有可能被非法读取。而 char 数组,可以随时修改其中的内容,可以降低通过非法读取内存获得密码的可能性。
主要是出于安全方面的考虑。String是不可修改的对象,String的任何操作都会产生新的对象,原来的对象在垃圾回收之前就有可能被非法读取。而char数组,可以随时修改其中的内容,可以降低通过非法读取内存获得密码的可能性。
回答了 匿名用户:
Java 1.7之前的版本: import java.util.R public static int randInt(int min, int max) { R int randomNum = rand.nextInt((max min) + 1) + return randomN } Java1.7和1.7以后的版本: import java.util.concurrent.ThreadLocalR ThreadLocalRandom.current().nextInt(min, max + 1);
Java 1.7之前的版本:import java.util.R
public static int randInt(int min, int max) {
int randomNum = rand.nextInt((max - min) + 1) +
return randomN
Java1.7和1.7以后的版本:import java.util.concurrent.ThreadLocalR
ThreadLocalRandom.current().nextInt(min, max + 1);
回答了 匿名用户:
可以使用Apache commons的 IOUtils http://commons.apache.org/proper/commons io/apidocs/org/apache/commons/io/IOUtils.html , mons.io.IOUtils 。 public static String toString(InputStream input) throws IOException { StringWriter stringWriter = new StringWriter(); copy(input, stringWriter); return stringWriter.toString(); } 或者 String theString = IOUtils.toString(inputStream, encoding);
可以使用Apache commons的, mons.io.IOUtils。public static String toString(InputStream input) throws IOException {
StringWriter stringWriter = new StringWriter();
copy(input, stringWriter);
return stringWriter.toString();
或者String theString = IOUtils.toString(inputStream, encoding);
回答了 匿名用户:
两者都实现了 List 接口,故名思议,一种是基于链表的实现,一种是基于数组的实现。所以两者的区别主要就在于两种数据结构的区别。 对于获取元素的 get 操作, ArrayList 的复杂度为 o(1) ,但是 LinkedList 的复杂度为 o(n) 删除增加元素的操作则 LinkedList 又有优势。 根据元素增删改查的场景来选择,一般情况下使用 ArrayList 即可。
两者都实现了List接口,故名思议,一种是基于链表的实现,一种是基于数组的实现。所以两者的区别主要就在于两种数据结构的区别。对于获取元素的get操作,ArrayList的复杂度为o(1),但是LinkedList的复杂度为o(n)删除增加元素的操作则LinkedList又有优势。根据元素增删改查的场景来选择,一般情况下使用ArrayList即可。
回答了 匿名用户:
只能传值,Java规范明确说的就是传值。引用在Java中就是一种值。 除了原生数据类型,Java中任何对象都属于一种引用数据类型(即类)。 不要和C++中的传值和传引用混淆了。
只能传值,Java规范明确说的就是传值。引用在Java中就是一种值。除了原生数据类型,Java中任何对象都属于一种引用数据类型(即类)。不要和C++中的传值和传引用混淆了。
回答了 匿名用户:
HashTable 是同步的,适用于多线程环境。而 HashMap 是非同步的,单线程环境下性能比 HashTable 要好。 此外, HashTable 不允许有 null 值的键和值,但是 HashMap 没有限制。
HashTable是同步的,适用于多线程环境。而HashMap是非同步的,单线程环境下性能比HashTable要好。此外,HashTable不允许有null值的键和值,但是HashMap没有限制。
先看看这个 Java入门基础教程 /java basic , 将Java的入门基础知识贯穿在一个实例中,逐步深入,帮助你快速了解Java编程。
先看看这个, 将Java的入门基础知识贯穿在一个实例中,逐步深入,帮助你快速了解Java编程。
我们实验室的学生全部是软件工程方向,基本就是在各个行业做软件工程师,有一部分去了银行国企事业单位,实际情况和计算机专业没什么区别。 如果一定要对标的话,软件工程毕业的学生,百度的工程效率部门,Google的工程生产力部门,应该是软件工程所学的那些专业课程比较契合的工作。
我们实验室的学生全部是软件工程方向,基本就是在各个行业做软件工程师,有一部分去了银行国企事业单位,实际情况和计算机专业没什么区别。如果一定要对标的话,软件工程毕业的学生,百度的工程效率部门,Google的工程生产力部门,应该是软件工程所学的那些专业课程比较契合的工作。
知乎上回答过类似的问题。 给你推荐一个写得非常用心的Java基础教程: java basic | 天码营 /java basic 这个教程将Java的入门基础知识贯穿在一个实例中,逐步深入,可以帮助你快速进入Java编程的世界。万事开头难,逐步跟着这个教程走一遍,对Java应该就会有一种入门的感觉了。然后再去学习更高级的主题,或者更深入地学习其中的某些知识点。 1、学习的基本路径 首先建立好开发环境非常重要,工欲善其事,必先利其器。做任何开发,首先就是要把这个环境准备好,之后就可以去做各种尝试,尝试过程中就能逐渐建立信心。初学者往往在环境配置中被各种预想不到的问题弄得很沮丧。 建立起来环境了,改变世界就靠你的代码了。学习一门编程语言没有太多的诀窍,你可能可以去找一本比较好的经典的入门书籍,现在网络上也有非常多的资料,图文或者视频都可以,根据个人喜好选择。最重要的练习,熟能生巧,在不断的练习中去加深自己对程序语言的理解。 接下来你需要了解这三个术语,叫SDK、API跟Lib,分别表示软件开发套件,应用编程接口和库。这三者之间其实有一定的联系,或者是交叉。总体来说,它们都是给我们提供的一些封装了底层功能的基础设施。做Java开发的话,这些东西通常体现为我们所经常说的“框架”。事实上要成为一个资深的Java开发者,对各种API和框架的学习,可能是花时间最多的一个地方。 当然你也不可能把所有API或者SDK种的所有内容完全弄懂。在软件开发中也有二八原则,少数的API能够胜任开发中的大部分场景。所以你只需要掌握这些关键部分,当在新场景下遇到不能解决的新问题时,再去查看帮助文档。所以帮助文档的阅读也是技术学习的一个关键因素。了解了基础原理之后一般就能上手开发了,帮助文档可以帮助你在实践中学习。 2、三个神器 三个神器,对于软件开发者来说非常重要。 第一个Google,虽然因为各种原因的话有时候我们访问不了,但是这基本上是可以去寻找技术资料最好的方式。 第二个是Github,之前提到过库的概念,Github就是一个可以找到大量第三方库的地方,那是别人给我们封装好的可以复用的代码。比方说造一辆汽车的话,我们经常不要自己造轮子,而Github上可以找到很多优质的轮子,这些轮子还是免费(代码都是开源的),我们应该尽量利用它们来拼装自己的汽车。 第三个是StackOverflow网站,在这个问答网站上你遇到的几乎任何开发问题都能快速找到答案。 3、Java Web全栈开发的推荐学习内容 简单总结一下,大概包括下面这些内容。每一部分都可以细化成很多知识点,这只是一个粗略的罗列。把它当做技术地图就好了。 开发环境的建立与项目管理:Eclipse、Maven和Git Java编程基础:基本语法、面向对象特性、Java8新特性、更高级库(比如Guava)的使用等 前端开发技术:HTML、CSS、Bootstrap和JavaScript基础 Spring基础:依赖注入IoC、面向切面编程AOP、SpringBoot MVC框架:Spring MVC、Struts等,包括URL路由、模板、表单、Session、拦截器等知识 数据访问:关系型数据库、JDBC、Spring JDBC、事务、ORM框架(MyBatis,Hibernate、JPA) 成熟应用的关键功能实现:邮件发送、异步任务、缓存、日志等 应用的测试和部署 4、JSP/Servlet的相关内容 最后专门提一下JSP和Servlet,虽然现在各种成熟的MVC框架已经让Java Web开发基本很少使用JSP和Servlet的原生功能了,基本都做了一层封装。但是这部分基础知识建议初学者还是要认真学习。 Web基础,HTTP协议 1. C/S模型,浏览器访问网站过程 2. URL基础知识 3. HTTP消息——请求和响应 4. 处理HTTP请求的应用程序 5. Servlet/JSP简介 Servlet 1. Servlet容器,Servlet处理机制,Servlet生命周期 2. 部署Servlet 3. ServletContext, ServletConfig 4. Filter, Event Listener JSP 1. 表达式,scriptlet, declaration 2. 在JSP中访问Java类 3. JSP内置对象 处理用户输入 1. HTTP方法——GET v.s. POST 2. 读取表单数据 构建MVC应用 1. Servlets/JSP存在的问题 2. MVC设计模式 3. 使用RequestDispatcher 4. 在Servlets和JSP中传递数据,EL表达式 使用JSTL作为模板 1. JSP Tag Lib 2. Core Tag(if, loop) 3. Function Tag(string, fmt, utils) Session Session&&Cookie基本概念 通过Cookie记录用户状态 使用Session跟踪用户 5、更进一步 分布式、深入Java虚拟机、针对不同场景的Java技术框架,到这个阶段已经不仅仅是Java的学习了,而是大型应用场景的技术积累、架构设计的精进了。
知乎上回答过类似的问题。给你推荐一个写得非常用心的Java基础教程:这个教程将Java的入门基础知识贯穿在一个实例中,逐步深入,可以帮助你快速进入Java编程的世界。万事开头难,逐步跟着这个教程走一遍,对Java应该就会有一种入门的感觉了。然后再去学习更高级的主题,或者更深入地学习其中的某些知识点。1、学习的基本路径首先建立好开发环境非常重要,工欲善其事,必先利其器。做任何开发,首先就是要把这个环境准备好,之后就可以去做各种尝试,尝试过程中就能逐渐建立信心。初学者往往在环境配置中被各种预想不到的问题弄得很沮丧。建立起来环境了,改变世界就靠你的代码了。学习一门编程语言没有太多的诀窍,你可能可以去找一本比较好的经典的入门书籍,现在网络上也有非常多的资料,图文或者视频都可以,根据个人喜好选择。最重要的练习,熟能生巧,在不断的练习中去加深自己对程序语言的理解。接下来你需要了解这三个术语,叫SDK、API跟Lib,分别表示软件开发套件,应用编程接口和库。这三者之间其实有一定的联系,或者是交叉。总体来说,它们都是给我们提供的一些封装了底层功能的基础设施。做Java开发的话,这些东西通常体现为我们所经常说的“框架”。事实上要成为一个资深的Java开发者,对各种API和框架的学习,可能是花时间最多的一个地方。当然你也不可能把所有API或者SDK种的所有内容完全弄懂。在软件开发中也有二八原则,少数的API能够胜任开发中的大部分场景。所以你只需要掌握这些关键部分,当在新场景下遇到不能解决的新问题时,再去查看帮助文档。所以帮助文档的阅读也是技术学习的一个关键因素。了解了基础原理之后一般就能上手开发了,帮助文档可以帮助你在实践中学习。2、三个神器三个神器,对于软件开发者来说非常重要。第一个Google,虽然因为各种原因的话有时候我们访问不了,但是这基本上是可以去寻找技术资料最好的方式。第二个是Github,之前提到过库的概念,Github就是一个可以找到大量第三方库的地方,那是别人给我们封装好的可以复用的代码。比方说造一辆汽车的话,我们经常不要自己造轮子,而Github上可以找到很多优质的轮子,这些轮子还是免费(代码都是开源的),我们应该尽量利用它们来拼装自己的汽车。第三个是StackOverflow网站,在这个问答网站上你遇到的几乎任何开发问题都能快速找到答案。**3、Java Web全栈开发的推荐学习内容**简单总结一下,大概包括下面这些内容。每一部分都可以细化成很多知识点,这只是一个粗略的罗列。把它当做技术地图就好了。开发环境的建立与项目管理:Eclipse、Maven和GitJava编程基础:基本语法、面向对象特性、Java8新特性、更高级库(比如Guava)的使用等前端开发技术:HTML、CSS、Bootstrap和JavaScript基础Spring基础:依赖注入IoC、面向切面编程AOP、SpringBootMVC框架:Spring MVC、Struts等,包括URL路由、模板、表单、Session、拦截器等知识数据访问:关系型数据库、JDBC、Spring JDBC、事务、ORM框架(MyBatis,Hibernate、JPA)成熟应用的关键功能实现:邮件发送、异步任务、缓存、日志等应用的测试和部署4、JSP/Servlet的相关内容最后专门提一下JSP和Servlet,虽然现在各种成熟的MVC框架已经让Java Web开发基本很少使用JSP和Servlet的原生功能了,基本都做了一层封装。但是这部分基础知识建议初学者还是要认真学习。Web基础,HTTP协议C/S模型,浏览器访问网站过程URL基础知识HTTP消息——请求和响应处理HTTP请求的应用程序Servlet/JSP简介ServletServlet容器,Servlet处理机制,Servlet生命周期部署ServletServletContext, ServletConfigFilter, Event ListenerJSP表达式,scriptlet, declaration在JSP中访问Java类JSP内置对象处理用户输入HTTP方法——GET v.s. POST读取表单数据构建MVC应用Servlets/JSP存在的问题MVC设计模式使用RequestDispatcher在Servlets和JSP中传递数据,EL表达式使用JSTL作为模板JSP Tag LibCore Tag(if, loop)Function Tag(string, fmt, utils)SessionSession&&Cookie基本概念通过Cookie记录用户状态使用Session跟踪用户5、更进一步分布式、深入Java虚拟机、针对不同场景的Java技术框架,到这个阶段已经不仅仅是Java的学习了,而是大型应用场景的技术积累、架构设计的精进了。
回答了 匿名用户:
你可以看参考代码,整个项目的代码都在上面。
你可以看参考代码,整个项目的代码都在上面。
看看build.gradle文件,将compileSdkVersion设为23试试。
看看build.gradle文件,将compileSdkVersion设为23试试。
在下面的系统变量中,往下拉动,能看到path变量,点击编辑,添加内容即可。
在下面的系统变量中,往下拉动,能看到path变量,点击编辑,添加内容即可。
你提的问题太大了,建议你先从这两点入手: 你可以了解一下 开始学习Java Web开发之前你需要了解的知识 /tutorial/knowledge before you learn java web 至于Java Web中涉及的各种技术,你参考 Web技术发展历史 /tutorial/web history 学习这两篇经验文章的过程中,如果有具体问题可以再提出来。
你提的问题太大了,建议你先从这两点入手:你可以了解一下至于Java Web中涉及的各种技术,你参考学习这两篇经验文章的过程中,如果有具体问题可以再提出来。
回答了 匿名用户:
暂时没有计划开这样的课程,有问题可以随时在天码营交流和提问
暂时没有计划开这样的课程,有问题可以随时在天码营交流和提问
回答了 匿名用户:
转我在知乎的回答。 大家应该都能说几个自己常用的模式出来,我倒觉得没有必要纠结一个设计模式的列表,不如说说设计模式的学习过程,了解了这个过程,你会发现哪些模式比较常见可能并非最重要的问题。 第一阶段:手中无剑,心中无剑 初步掌握一门面向对象编程语言,了解了类、对象、接口等概念。听别人说到“设计模式”感觉特别高大上,自己不太懂,也用不太起来。 第二阶段:手中有剑,心中无剑 既然不太懂,那就学呗。四人帮经典23式开始一招一招比划。但此时手中虽有了重剑,却不太能舞起来。如果说某人第一次看《设计模式》,就看得通透的话,那我真是佩服得五体投地。 主要原因是,刚开始学习设计模式的人,开发经验一般相对较少,此时我们还缺乏实际经历的应用场景去做参考,看着书中的例子很难感同身受,比如我们看到“封装XX变化性”之类的描述很难引起共鸣。而且很有可能模式的描述和场景压根就不太明白。 但是没关系,此时我们也能像模像样喊出几个招式了,也基本有个感性认识,虽然实际工作中还不太有感觉。 第三阶段:手中有剑,心中有剑 随着自己的学习和开发经历的丰富,你已经对设计模式有一定理解了。在阅读开源代码,或者身边高手的代码时,你经常可以发现可以对应于某模式,因为类命名会出现设计模式中的术语,Factory, Builder,Strategy等。你逐渐明白了某个模式用在某个地方能起到什么作用,你经常会有一种"Wow"的赶脚。 这时你在编程过程中,能够照猫画虎的用设计模式了。而且你开始学习面向对象设计原则,比如SOLID原则也有了一定的理解。你跟别人讨论时,可以大声地说:让我们使用一个XX模式来支持更好的扩展性吧。你时不时会回头去《设计模式》,除了能够提供参考,此时你会有一些新的体会了。 第四阶段:手中无剑,心中有剑 你已经有设计和架构的概念了,这时你已经开始面对一个几万行甚至几十万行的项目,有一天你发现代码已经很难快速响应需求变化了,又没办法推倒重来(虽然推倒重来是码农最爱),所以来重构吧,重构的过程中,一个个设计模式把代码维护中的一个个痛点逐个击破,你对代码的“smell”有了更深刻的理解,你开始对copy paste代码深恶痛绝,你发现原来重构和设计模式竟然是孪生兄弟。 你开始明白一个长期维护和演化的项目,设计如此之重要。你不自觉地就会主动去翻《重构》、《浮现式设计》、《领域驱动设计》、Bob大叔的《敏捷软件开发》、《企业应用架构模式》等等,虽然你之前可能看过,但此时你看他们的心境和底蕴已经不一样了,你会发现这帮家伙确实很会总结。 最终,你回本溯源,你还是拿起了当初那本《设计模式》,你终于深深地体会到了里面闪烁的智慧,“面向接口编程”,“组合优先继承”,多么朴素的文字,或许很多人都能说出来,但是你确定你现在的理解更加深刻了。 你会发现,此时你手中已经无剑了,你不会想着什么模式列表了,不会想着某个模式重要了。进行一个复杂设计时,不自觉地就从软件开发的终极目标“高内聚低耦合”出发,“面向接口编程”,“组合优先继承”,“创建与使用分离”等认知成为体液反应,结合需求场景,每定义下一个类都有“开放封闭”等各种面向对象设计原则护体,随着项目演进,你能敏锐地嗅到各种代码smell,知道如何考虑现有资源去减少该死的技术债,随时进行着重构。 有一天,你的小弟问你,怎么State模式和Strategy模式的类图是一样的? 你装逼地笑了笑,说到:这些不重要,心中有剑就能无往不胜。
转我在知乎的回答。大家应该都能说几个自己常用的模式出来,我倒觉得没有必要纠结一个设计模式的列表,不如说说设计模式的学习过程,了解了这个过程,你会发现哪些模式比较常见可能并非最重要的问题。第一阶段:手中无剑,心中无剑初步掌握一门面向对象编程语言,了解了类、对象、接口等概念。听别人说到“设计模式”感觉特别高大上,自己不太懂,也用不太起来。第二阶段:手中有剑,心中无剑既然不太懂,那就学呗。四人帮经典23式开始一招一招比划。但此时手中虽有了重剑,却不太能舞起来。如果说某人第一次看《设计模式》,就看得通透的话,那我真是佩服得五体投地。主要原因是,刚开始学习设计模式的人,开发经验一般相对较少,此时我们还缺乏实际经历的应用场景去做参考,看着书中的例子很难感同身受,比如我们看到“封装XX变化性”之类的描述很难引起共鸣。而且很有可能模式的描述和场景压根就不太明白。但是没关系,此时我们也能像模像样喊出几个招式了,也基本有个感性认识,虽然实际工作中还不太有感觉。第三阶段:手中有剑,心中有剑随着自己的学习和开发经历的丰富,你已经对设计模式有一定理解了。在阅读开源代码,或者身边高手的代码时,你经常可以发现可以对应于某模式,因为类命名会出现设计模式中的术语,Factory, Builder,Strategy等。你逐渐明白了某个模式用在某个地方能起到什么作用,你经常会有一种"Wow"的赶脚。这时你在编程过程中,能够照猫画虎的用设计模式了。而且你开始学习面向对象设计原则,比如SOLID原则也有了一定的理解。你跟别人讨论时,可以大声地说:让我们使用一个XX模式来支持更好的扩展性吧。你时不时会回头去《设计模式》,除了能够提供参考,此时你会有一些新的体会了。第四阶段:手中无剑,心中有剑你已经有设计和架构的概念了,这时你已经开始面对一个几万行甚至几十万行的项目,有一天你发现代码已经很难快速响应需求变化了,又没办法推倒重来(虽然推倒重来是码农最爱),所以来重构吧,重构的过程中,一个个设计模式把代码维护中的一个个痛点逐个击破,你对代码的“smell”有了更深刻的理解,你开始对copy-paste代码深恶痛绝,你发现原来重构和设计模式竟然是孪生兄弟。你开始明白一个长期维护和演化的项目,设计如此之重要。你不自觉地就会主动去翻《重构》、《浮现式设计》、《领域驱动设计》、Bob大叔的《敏捷软件开发》、《企业应用架构模式》等等,虽然你之前可能看过,但此时你看他们的心境和底蕴已经不一样了,你会发现这帮家伙确实很会总结。最终,你回本溯源,你还是拿起了当初那本《设计模式》,你终于深深地体会到了里面闪烁的智慧,“面向接口编程”,“组合优先继承”,多么朴素的文字,或许很多人都能说出来,但是你确定你现在的理解更加深刻了。你会发现,此时你手中已经无剑了,你不会想着什么模式列表了,不会想着某个模式重要了。进行一个复杂设计时,不自觉地就从软件开发的终极目标“高内聚低耦合”出发,“面向接口编程”,“组合优先继承”,“创建与使用分离”等认知成为体液反应,结合需求场景,每定义下一个类都有“开放封闭”等各种面向对象设计原则护体,随着项目演进,你能敏锐地嗅到各种代码smell,知道如何考虑现有资源去减少该死的技术债,随时进行着重构。有一天,你的小弟问你,怎么State模式和Strategy模式的类图是一样的? 你装逼地笑了笑,说到:这些不重要,心中有剑就能无往不胜。
1、不同之处在哪? Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容 JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容 2、各自的特点 Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差 JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的 3、通过MVC双剑合璧 既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model View Controller)模式非常适合解决这一问题。 MVC模式(Model View Controller)是软件工程中的一种架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller): Controller——负责转发请求,对请求进行处理 View——负责界面显示 Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现 在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示: 1. Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发) 2. Controller(Servlet)调用核心业务逻辑——Model部分,获得结果 3. Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容 4. 动态生成的HTML内容返回到浏览器显示 MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。
1、不同之处在哪?Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容2、各自的特点Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的3、通过MVC双剑合璧既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model-View-Controller)模式非常适合解决这一问题。MVC模式(Model-View-Controller)是软件工程中的一种架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):Controller——负责转发请求,对请求进行处理View——负责界面显示Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)Controller(Servlet)调用核心业务逻辑——Model部分,获得结果Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容动态生成的HTML内容返回到浏览器显示MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。
回答了 匿名用户:
转帖我知乎上的 回答 /question//answer/ 我更多从招人的角度给你几点建议。 我招一个Java程序员,我大概会这样来考察一个人。 1、至少你得过了笔试或者网上的编程测试吧。面试机会先拿到。既然目标是比较好的Offer,一般还是会考察你CS基础知识的。去看看各个公司的笔试题,网上到处是。算法和CS核心课程你还是应该去复习的。 2、喜欢编程的人,大都会折腾个Github项目之类的,哪怕是个简单的博客应用,如果我看到你会去捣鼓这些东西的话,我会认为你是一个有编程热情的人,很加分。 3、有一两个做得深入的项目很加分,去争取参与实际项目机会,身边有这样喜欢折腾的朋友那就再好不过了。实在找不到自己去实现一个网站或者App,部署或者分发出来,活生生的东西可以增加说服力。找个项目创意还是很容易,没这方面Sense,山寨也行,练手而已嘛,做得好说不定成了创业项目。 4、除编程之外,有一两种你深入理解和掌握的技术,比如Java求职的话,你对Spring的整套体系甚至源码理解很深入可以大大加分。技术涉猎比较广泛的人,是比较受欢迎的。 5、赶紧找实习吧,实习进入好公司的门槛相对低一些,积累经历的同时,内推也更有机会。 6、你确实数学功底不错的话,怒刷算法也能增加一些机会。算法更多是用来考察逻辑思维和学习潜力的,如果你有编程竞赛背书的话,会大大加分;只是我出题时算法答得好,有加分,不多。对一般人而言,让算法别给你减分就行了。 综上,套用蓝海战略的术语,我给你的战略是: 在没有“名校背书”、“编程竞赛获奖”等价值点的情况下,在“算法”和“CS基础知识”这些价值点上至少要不低于竞争对手的平均水平,在“技术热情与好奇心”、“实战经验”这两个价值点不妨重点突破。这样的话有机会拿下一线IT公司的Offer。 如果希望想在“算法”这个价值点上寻求突破,参考上面所说的第六点。 想翻墙去北美,就忽略上面全部所说,算法是命门,可以看我一个同学的攻略: american dream of coders /?target=http%3A///american dream of coders 其它几个观点,供你参考: 关于非科班: 就编程技能而言,很多非科班出身的人都做得非常不错,从求职来说的话完全可以不输科班。 科班出身,一个优势在于学习了很多计算机专业的核心课程,这些课程的确是帮助我们建立计算机修养的东西,潜移默化地影响和提升我们的技术底蕴。就跟一个人看书多也能增加人文修养类似。法国人学数学都是一种修养,所以出大数学家。同样和人文修养类似,计算机修养对我们职业生涯的影响却并不是立竿见影的,大部分情况下可以说是不影响求职的。一个现象就是即使CS科班出身的人,最后往往也会发现实际工作中未必会用到学到的知识。我们要辩证地看待这一点。举个例子,编译原理可能你工作中从来不会遇到,但是深入学习过编译原理的人,对“语言”的理解一定会更加深刻,你学习各种语言(不特指编程语言)或者需要去设计一种描述语言的时候,你会对如何去构造、解析和解释一种语言会更加得心应手。甚至看待生活中的语言也会有全新的视角。 一个非科班出生的程序员,随着编程技能的精进,解决问题的深度和难度增加,肯定也会逐渐涉及到计算机核心课程中的东西,比如操作系统,高级的数据结构、编译原理等。这个时候其实所谓的非科班,在我看来已经是科班了,不过是闻道有先后而已。 关于学历: 名校背景找工作必然是加分的,在短时间内考察一个人,教育背景是对一个人学习能力和潜力的一个很重要的背书。 中下游211的非CS专业,对于稍好的公司来说,你在学历这个因素是略减分的。但这只是一个因素而已,技术热情、算法基础、编程语言的深入程度、实际项目经验这些方面做好,加权一下综合得分就上来了。从培训机构、专科到名校CS毕业生,拿到好Offer的人都有。 说到学历问题,我们来说深入一点。其实所谓的“综合得分”是一种最理性的判断。但是面试官往往很难做出综合的判断,甚至有唯学历论者,这不能全怪面试官,而是人的一个基本特质所决定的。 一个英国哲学家曾经说过:文明的进步就是人们在不假思索中可以做的事情越来越多。人的行为常常会被一些很局部的特征所触发,而这种触发很多情况下自己是意识不到的。这是社会心理学经典著作《影响力》的一个核心观点。拿动物来举例子,火鸡正常情况下会攻击臭鼬,但是一个能够发出小火鸡“叽叽”声的玩具臭鼬,却会让火鸡妈妈将其揽入怀中。 所以学历很多时候就是这样的“叽叽”声,在一部分面试官的眼里不自觉地就已经基于学历做了一个判断,“综合得分”可能并不起太大作用,而他们自己甚至没有意识到这一点。 我也看到过“唯算法”论者,我一个同学曾经遇到一个某知名顶级互联网企业的面试官,热衷考面试者算法难题,在一个很生僻的数据结构(即使ACM竞赛中也几乎不会出现)上纠缠很久,这个同学最后没有写出来被拒了。这个同学是一个综合实力非常强的人,即使算法上也是竞赛级的水平,但是碰到这样的“火鸡”也无奈之。他现在在另一家同级别的北美公司工作,这样的面试官毕竟少数,也不要太担心。 可能的解释是:这类面试官的经历让他们潜意识中对“学历”和“算法”有了较深的体会,甚至成为一种情结,在某些场景下就会成为一个极强的局部触发特征而影响他们的行为。 为什么我给你的战略里,提到了可以从“技术热情与好奇心”来突破呢? 其实也是对这样一种原理的应用。如果在面试过程中体现出来你热爱技术,喜欢尝试,涉猎广泛,往往容易成为一个触动面试官的特征。也举个例子,我一个师弟是个Java程序员,去面一家国内应届生薪资水平可能是最高的一个公司。面完后我问他情况,各种技术问题(更多C++方面的)他答得很惨,但是说完不久就被通知录用了。我要是面试官也是一定会录取他的。因为从本科开始他就折腾各种项目,你跟他聊天就看得出来是有很大编程热情的人,这样的人一定可以胜任任何技术工作。(他的竞争对手几乎是同级别教育背景,所以学历这项在这里不构成很大的优势)对,写到这我想到了Geek这个词,你应该让自己更Geek一些。不是留个长头发就Geek了,Geek体现在你Github账号的行为记录上,体现在你对各种技术的尝试经历中。 扯远了,最后再说一点。 关于第一份工作 : IT行业第一份工作即使不是特别满意,也不用太担心,积极努力总能达到目标的。继续举例子吧,亲朋好友搞IT的也无数,最不缺的就是例子: A,专科学校,第一份工作月薪3K,做ActionScript开发,一年后跳槽页游公司,两年之后月薪已经到20K。 B,普通院校毕业,第一份工作在一个国企性质类的软件公司,Java开发,月薪5K,两年后跳到IBM。 C,普通学校,第一份工作非IT,某培训机构学习半年,iOS开发,入职顺丰,月薪10K+。 ABC有一个相同的特点就是有上进心。其实有技术热情,愿意沉下心来学习,普通资质的人工作几年之后,跳到不错的公司工作也是问题不大的。大一点说,各个行业也都是如此,CS转去做其他行业的也都有很多做的很好的例子。很多事情也都是分层跨越,不是一蹴而就的,步子大容易扯着蛋,这也是积跬步的力量。比如先找到实习,正式工作就有一半着落了;比如本科没考上名校,可能研究生就考上了;毕业没有进入BAT,小公司努力锻炼几年你就追赶上BAT的伙伴们了。
转帖我知乎上的我更多从招人的角度给你几点建议。我招一个Java程序员,我大概会这样来考察一个人。1、至少你得过了笔试或者网上的编程测试吧。面试机会先拿到。既然目标是比较好的Offer,一般还是会考察你CS基础知识的。去看看各个公司的笔试题,网上到处是。算法和CS核心课程你还是应该去复习的。2、喜欢编程的人,大都会折腾个Github项目之类的,哪怕是个简单的博客应用,如果我看到你会去捣鼓这些东西的话,我会认为你是一个有编程热情的人,很加分。3、有一两个做得深入的项目很加分,去争取参与实际项目机会,身边有这样喜欢折腾的朋友那就再好不过了。实在找不到自己去实现一个网站或者App,部署或者分发出来,活生生的东西可以增加说服力。找个项目创意还是很容易,没这方面Sense,山寨也行,练手而已嘛,做得好说不定成了创业项目。4、除编程之外,有一两种你深入理解和掌握的技术,比如Java求职的话,你对Spring的整套体系甚至源码理解很深入可以大大加分。技术涉猎比较广泛的人,是比较受欢迎的。5、赶紧找实习吧,实习进入好公司的门槛相对低一些,积累经历的同时,内推也更有机会。6、你确实数学功底不错的话,怒刷算法也能增加一些机会。算法更多是用来考察逻辑思维和学习潜力的,如果你有编程竞赛背书的话,会大大加分;只是我出题时算法答得好,有加分,不多。对一般人而言,让算法别给你减分就行了。综上,套用蓝海战略的术语,我给你的战略是:在没有“名校背书”、“编程竞赛获奖”等价值点的情况下,在“算法”和“CS基础知识”这些价值点上至少要不低于竞争对手的平均水平,在“技术热情与好奇心”、“实战经验”这两个价值点不妨重点突破。这样的话有机会拿下一线IT公司的Offer。如果希望想在“算法”这个价值点上寻求突破,参考上面所说的第六点。想翻墙去北美,就忽略上面全部所说,算法是命门,可以看我一个同学的攻略:其它几个观点,供你参考:关于非科班:就编程技能而言,很多非科班出身的人都做得非常不错,从求职来说的话完全可以不输科班。科班出身,一个优势在于学习了很多计算机专业的核心课程,这些课程的确是帮助我们建立计算机修养的东西,潜移默化地影响和提升我们的技术底蕴。就跟一个人看书多也能增加人文修养类似。法国人学数学都是一种修养,所以出大数学家。同样和人文修养类似,计算机修养对我们职业生涯的影响却并不是立竿见影的,大部分情况下可以说是不影响求职的。一个现象就是即使CS科班出身的人,最后往往也会发现实际工作中未必会用到学到的知识。我们要辩证地看待这一点。举个例子,编译原理可能你工作中从来不会遇到,但是深入学习过编译原理的人,对“语言”的理解一定会更加深刻,你学习各种语言(不特指编程语言)或者需要去设计一种描述语言的时候,你会对如何去构造、解析和解释一种语言会更加得心应手。甚至看待生活中的语言也会有全新的视角。一个非科班出生的程序员,随着编程技能的精进,解决问题的深度和难度增加,肯定也会逐渐涉及到计算机核心课程中的东西,比如操作系统,高级的数据结构、编译原理等。这个时候其实所谓的非科班,在我看来已经是科班了,不过是闻道有先后而已。关于学历:名校背景找工作必然是加分的,在短时间内考察一个人,教育背景是对一个人学习能力和潜力的一个很重要的背书。中下游211的非CS专业,对于稍好的公司来说,你在学历这个因素是略减分的。但这只是一个因素而已,技术热情、算法基础、编程语言的深入程度、实际项目经验这些方面做好,加权一下综合得分就上来了。从培训机构、专科到名校CS毕业生,拿到好Offer的人都有。说到学历问题,我们来说深入一点。其实所谓的“综合得分”是一种最理性的判断。但是面试官往往很难做出综合的判断,甚至有唯学历论者,这不能全怪面试官,而是人的一个基本特质所决定的。一个英国哲学家曾经说过:文明的进步就是人们在不假思索中可以做的事情越来越多。人的行为常常会被一些很局部的特征所触发,而这种触发很多情况下自己是意识不到的。这是社会心理学经典著作《影响力》的一个核心观点。拿动物来举例子,火鸡正常情况下会攻击臭鼬,但是一个能够发出小火鸡“叽叽”声的玩具臭鼬,却会让火鸡妈妈将其揽入怀中。所以学历很多时候就是这样的“叽叽”声,在一部分面试官的眼里不自觉地就已经基于学历做了一个判断,“综合得分”可能并不起太大作用,而他们自己甚至没有意识到这一点。我也看到过“唯算法”论者,我一个同学曾经遇到一个某知名顶级互联网企业的面试官,热衷考面试者算法难题,在一个很生僻的数据结构(即使ACM竞赛中也几乎不会出现)上纠缠很久,这个同学最后没有写出来被拒了。这个同学是一个综合实力非常强的人,即使算法上也是竞赛级的水平,但是碰到这样的“火鸡”也无奈之。他现在在另一家同级别的北美公司工作,这样的面试官毕竟少数,也不要太担心。可能的解释是:这类面试官的经历让他们潜意识中对“学历”和“算法”有了较深的体会,甚至成为一种情结,在某些场景下就会成为一个极强的局部触发特征而影响他们的行为。为什么我给你的战略里,提到了可以从“技术热情与好奇心”来突破呢? 其实也是对这样一种原理的应用。如果在面试过程中体现出来你热爱技术,喜欢尝试,涉猎广泛,往往容易成为一个触动面试官的特征。也举个例子,我一个师弟是个Java程序员,去面一家国内应届生薪资水平可能是最高的一个公司。面完后我问他情况,各种技术问题(更多C++方面的)他答得很惨,但是说完不久就被通知录用了。我要是面试官也是一定会录取他的。因为从本科开始他就折腾各种项目,你跟他聊天就看得出来是有很大编程热情的人,这样的人一定可以胜任任何技术工作。(他的竞争对手几乎是同级别教育背景,所以学历这项在这里不构成很大的优势)对,写到这我想到了Geek这个词,你应该让自己更Geek一些。不是留个长头发就Geek了,Geek体现在你Github账号的行为记录上,体现在你对各种技术的尝试经历中。扯远了,最后再说一点。关于第一份工作:IT行业第一份工作即使不是特别满意,也不用太担心,积极努力总能达到目标的。继续举例子吧,亲朋好友搞IT的也无数,最不缺的就是例子:A,专科学校,第一份工作月薪3K,做ActionScript开发,一年后跳槽页游公司,两年之后月薪已经到20K。B,普通院校毕业,第一份工作在一个国企性质类的软件公司,Java开发,月薪5K,两年后跳到IBM。C,普通学校,第一份工作非IT,某培训机构学习半年,iOS开发,入职顺丰,月薪10K+。ABC有一个相同的特点就是有上进心。其实有技术热情,愿意沉下心来学习,普通资质的人工作几年之后,跳到不错的公司工作也是问题不大的。大一点说,各个行业也都是如此,CS转去做其他行业的也都有很多做的很好的例子。很多事情也都是分层跨越,不是一蹴而就的,步子大容易扯着蛋,这也是积跬步的力量。比如先找到实习,正式工作就有一半着落了;比如本科没考上名校,可能研究生就考上了;毕业没有进入BAT,小公司努力锻炼几年你就追赶上BAT的伙伴们了。
回答了 匿名用户:
原因应该是,Struts2找不到路由配置中的命名空间(即/aa/bb/cc)会默认到root命名空间("/")找,这样就找到了/test/hello.html。 如果要解决的话,你把hello放到一个新建的命名空间中(url要相应变一下),不要放到root命名空间,这样应该就可以了。
原因应该是,Struts2找不到路由配置中的命名空间(即/aa/bb/cc)会默认到root命名空间("/")找,这样就找到了/test/hello.html。如果要解决的话,你把hello放到一个新建的命名空间中(url要相应变一下),不要放到root命名空间,这样应该就可以了。
回答了 匿名用户:
App类是启动Spring Boot,进而启动Spring Context的主类。 使用了Spring Boot,基本可以告别XML,所以只需要标注就行了,不需要在XML中配置aop了。标注就放App类上方。
App类是启动Spring Boot,进而启动Spring Context的主类。使用了Spring Boot,基本可以告别XML,所以只需要标注就行了,不需要在XML中配置aop了。标注就放App类上方。
可以把整段话贴出来,有个Context,翻译更准确一些。 这里大意就是:如果一个Servlet监听一个URL(就是路由的意思,比如通过配置或者标准的形式),那么URL被反问的时候,这个Servlet的goGet()方法(这里是你自己的实现代码)将被调用。
可以把整段话贴出来,有个Context,翻译更准确一些。这里大意就是:如果一个Servlet监听一个URL(就是路由的意思,比如通过配置或者标准的形式),那么URL被反问的时候,这个Servlet的goGet()方法(这里是你自己的实现代码)将被调用。
“Java框架”的范畴太大了,我猜你问的应该就是Java Web应用开发的框架吧,经典的就是SSH了(Spring, Struts, Hibernate),这里头包含了三类框架: 全栈“胶水”性质的框架:比如Spring、Seam等,基于IoC和AOP等功能,帮助你管理依赖、简化开发、整合外部框架。建议学习Spring。 MVC框架:Struts是老牌经典的MVC,JSF是组件式MVC框架,现在Spring MVC非常流行,Spring的最佳伴侣 ORM框架:Hibernate功能强大,MyBatis简单灵活易用 另外建议你了解一下 Spring Boot /qa/205 ,这里是一篇 Spring Boot 入门文章 /tutorial/spring boot overview 。
“Java框架”的范畴太大了,我猜你问的应该就是Java Web应用开发的框架吧,经典的就是SSH了(Spring, Struts, Hibernate),这里头包含了三类框架:全栈“胶水”性质的框架:比如Spring、Seam等,基于IoC和AOP等功能,帮助你管理依赖、简化开发、整合外部框架。建议学习Spring。MVC框架:Struts是老牌经典的MVC,JSF是组件式MVC框架,现在Spring MVC非常流行,Spring的最佳伴侣ORM框架:Hibernate功能强大,MyBatis简单灵活易用另外建议你了解一下,这里是一篇。
肉身翻墙更多需要准备算法和系统设计,FLAG这些公司更多考察这些东西,iOS开发如果有优秀项目是个加分项吧。 看看 yifeng /user/yifeng 的 分享 /course/american dream of coders ,可以向他问相关问题。
肉身翻墙更多需要准备算法和系统设计,FLAG这些公司更多考察这些东西,iOS开发如果有优秀项目是个加分项吧。看看的,可以向他问相关问题。
没有SAP实施的经验。如果能与CMMI或者敏捷实施类比的话,顾问的角色肯定要对相关标准和实践有深入的理解,然后在企业的实际应用,积累常见问题的解决方案,增长经验。另外,但凡顾问,忽悠b是必须的,多少的问题而已
没有SAP实施的经验。如果能与CMMI或者敏捷实施类比的话,顾问的角色肯定要对相关标准和实践有深入的理解,然后在企业的实际应用,积累常见问题的解决方案,增长经验。另外,但凡顾问,忽悠b是必须的,多少的问题而已
见这个 问题 /qa/245
没有遇到过这样的问题,就当做是阅读开源项目吧。还真从来没有想过自己是阅读一个项目的源码的,大抵如下吧: 首先当然从文档和代码组织结构中获取尽量多的信息 一般肯定要找核心功能的入口代码,从这个入口开始浏览代码 IDE挺重要的,从入口开始导航代码,看懂执行路径 宽度优先看懂整体流程,重点细节跟踪的深一些,从代码中理清楚关键流程和类的设计结构 还搞不懂就Run起来设断点吧 有些库会自动生成代理,会有不少配置文件,或者有自动生成的代码,早点识别出来会减少看代码的难度 我大概就是这样来看代码的吧。 至于django,项目结构已经比较固定,框架已经把Web层和持久层很多东西都固化了,更多的是先搞清楚核心业务逻辑吧(这这不需要看代码),然后理一理URL的设计和业务代码的类结构,应该就差不多了。
没有遇到过这样的问题,就当做是阅读开源项目吧。还真从来没有想过自己是阅读一个项目的源码的,大抵如下吧:首先当然从文档和代码组织结构中获取尽量多的信息一般肯定要找核心功能的入口代码,从这个入口开始浏览代码IDE挺重要的,从入口开始导航代码,看懂执行路径宽度优先看懂整体流程,重点细节跟踪的深一些,从代码中理清楚关键流程和类的设计结构还搞不懂就Run起来设断点吧有些库会自动生成代理,会有不少配置文件,或者有自动生成的代码,早点识别出来会减少看代码的难度我大概就是这样来看代码的吧。至于django,项目结构已经比较固定,框架已经把Web层和持久层很多东西都固化了,更多的是先搞清楚核心业务逻辑吧(这这不需要看代码),然后理一理URL的设计和业务代码的类结构,应该就差不多了。
首先想说的是,一个问题里头出现的概念,首先应该理解其内涵。 模块化是一个非常宽泛的概念,先假设这里的模块化指的是物理设计层面控制封装边界的手段。 几乎大部分帮助软件设计和架构的原则和模式主要都是关注逻辑设计,逻辑设计主要关于语言构 造块,比如类,操作符, 方法和包: 决定一个类是否应该是一个Singleton 决定一个操作是否应该是抽 象的 决定继承还是包含一个类 物理设计代表了软件系统中的物理实体,比如: 软件系统如何打包成可部署的单元 决定一个类放在哪个部署单元中 管理部署实体之间的关系 基于这些概念,来回到问题: 1. 做模块化开发的时候,你需要去划分模块吧,划分模块的时候,不就需要考虑扩展性吗? 换句话说,模块划分得好才能让系统高内聚低耦合,那将来扩展功能才更加容易 2. 你所说的“软件的模块化开发可以很方便的增加软件的功能”,我想你的意思大概是说因为已经有一些模块化的基础设施了(比如模块化的底层机制支持),所以模块化编程更方便了(比如对于Java来说不需要去自己处理ClassLoader和类路径相关的繁琐事情)。但是如果不考虑扩展性,再好的基础设施也无能为力。就跟你用面向对象编程语言,如果没有设计原则和设计模式的指导,你写出来的代码并不是真正面向对象的。 3. 刚刚提到了物理设计和逻辑设计的概念,两个层面都是考虑可扩展性。比如,即使在逻辑设计的时候考虑可扩展性,如果物理设计不考虑,最终也可能得不到你想要的效果。比如接口和实现逻辑上做了良好的分离,但是物理部署上放在一块,可能不一定得到你想要的热插拔效果。 模块化的内容也可以参考 killko /user/killko 最近的一个 模块化回答 /qa/1 如果有实际的例子,可以在回复中给出例子来讨论。
首先想说的是,一个问题里头出现的概念,首先应该理解其内涵。模块化是一个非常宽泛的概念,先假设这里的模块化指的是物理设计层面控制封装边界的手段。几乎大部分帮助软件设计和架构的原则和模式主要都是关注逻辑设计,逻辑设计主要关于语言构 造块,比如类,操作符, 方法和包:决定一个类是否应该是一个Singleton决定一个操作是否应该是抽 象的决定继承还是包含一个类物理设计代表了软件系统中的物理实体,比如:软件系统如何打包成可部署的单元决定一个类放在哪个部署单元中管理部署实体之间的关系基于这些概念,来回到问题:做模块化开发的时候,你需要去划分模块吧,划分模块的时候,不就需要考虑扩展性吗? 换句话说,模块划分得好才能让系统高内聚低耦合,那将来扩展功能才更加容易你所说的“软件的模块化开发可以很方便的增加软件的功能”,我想你的意思大概是说因为已经有一些模块化的基础设施了(比如模块化的底层机制支持),所以模块化编程更方便了(比如对于Java来说不需要去自己处理ClassLoader和类路径相关的繁琐事情)。但是如果不考虑扩展性,再好的基础设施也无能为力。就跟你用面向对象编程语言,如果没有设计原则和设计模式的指导,你写出来的代码并不是真正面向对象的。刚刚提到了物理设计和逻辑设计的概念,两个层面都是考虑可扩展性。比如,即使在逻辑设计的时候考虑可扩展性,如果物理设计不考虑,最终也可能得不到你想要的效果。比如接口和实现逻辑上做了良好的分离,但是物理部署上放在一块,可能不一定得到你想要的热插拔效果。模块化的内容也可以参考最近的一个如果有实际的例子,可以在回复中给出例子来讨论。
不了解openerp,google了一下,这就是一个经典的企业级Web应用。 ORM、报表和工作流引擎是企业快速开发平台的标配,国内也有一干这类快速开发平台(做得好的不多,骗国家和政府项目和经费的一堆),简单粗暴,用的话有一定平台依赖性。 看到有一个BMD(Base Module Distribution)比较有意思,模块化开发的一个东西,不知道是做到开发层面的模块化,还是运行时也能热插拔。 回到问题,你做的就是面向企业应用的Web开发。你会基于非常成熟的框架在上面写业务代码,写配置,所以除了熟悉python(做后端的话),接下来就是熟悉openerp的开发规范了。 不过这样的平台屏蔽了太多细节,所以建议深入底层,或者至少某一个部分的实现,把内部机制和实现原理搞清楚,仅仅浮在上面做点业务开发,意思不大,成长空间有限。
不了解openerp,google了一下,这就是一个经典的企业级Web应用。ORM、报表和工作流引擎是企业快速开发平台的标配,国内也有一干这类快速开发平台(做得好的不多,骗国家和政府项目和经费的一堆),简单粗暴,用的话有一定平台依赖性。看到有一个BMD(Base Module Distribution)比较有意思,模块化开发的一个东西,不知道是做到开发层面的模块化,还是运行时也能热插拔。回到问题,你做的就是面向企业应用的Web开发。你会基于非常成熟的框架在上面写业务代码,写配置,所以除了熟悉python(做后端的话),接下来就是熟悉openerp的开发规范了。不过这样的平台屏蔽了太多细节,所以建议深入底层,或者至少某一个部分的实现,把内部机制和实现原理搞清楚,仅仅浮在上面做点业务开发,意思不大,成长空间有限。
这个问题太随意,本来想忽略掉的,还是回答一下吧: 看书,Java语言方面我只看过《Thinking in Java》 动手,做实际项目,没实际用过的话逛看过的东西基本都会交回去 在动手过程中,逐步了解和应用更高级的知识,模板、并发、Classloader、内存模型等 跟进和使用语言的新特性,使用更好的Java Lib 再下去就是深入掌握特定领域的开发框架了,Java开发领域框架横飞,用框架提高开发效率 最后,看看天码营的 经验 /tutorials/tag/Java 。
这个问题太随意,本来想忽略掉的,还是回答一下吧:看书,Java语言方面我只看过《Thinking in Java》动手,做实际项目,没实际用过的话逛看过的东西基本都会交回去在动手过程中,逐步了解和应用更高级的知识,模板、并发、Classloader、内存模型等跟进和使用语言的新特性,使用更好的Java Lib再下去就是深入掌握特定领域的开发框架了,Java开发领域框架横飞,用框架提高开发效率最后,看看天码营的。
回答了 匿名用户:
第一个接触的Web开发脚本语言,第一个商业项目的开发语言都是PHP,不过已经太久远了,所以两者的对比没太大的发言权。 区别的话,两者对比最主要的问题就在于复用性/维护性跟开发效率之间的平衡吧, 一般情况 下认为php更适合快速开发,Java更适合大型项目,但都没有绝对,比如: 相对而言php确实上手和调试都比较快,但是有框架和工具的支持,Java其实也不逞让。甚至见过Java支持者拿着细节例子跟ruby做对比的例子,只为了证明基于一些基础设施java代码量跟ruby代码片其实相当。 说java适合大型工程,那facebook都玩php,还需要其他的例证吗?就如你说的各种扩展和改进,框架能让我们解决问题的能力提升一个档次。比如facebook能把php runtime都给优化了,谁还敢拿php谈性能问题。 这是个没有干货的回复,欢迎大家补充。
第一个接触的Web开发脚本语言,第一个商业项目的开发语言都是PHP,不过已经太久远了,所以两者的对比没太大的发言权。区别的话,两者对比最主要的问题就在于复用性/维护性跟开发效率之间的平衡吧,一般情况下认为php更适合快速开发,Java更适合大型项目,但都没有绝对,比如:相对而言php确实上手和调试都比较快,但是有框架和工具的支持,Java其实也不逞让。甚至见过Java支持者拿着细节例子跟ruby做对比的例子,只为了证明基于一些基础设施java代码量跟ruby代码片其实相当。说java适合大型工程,那facebook都玩php,还需要其他的例证吗?就如你说的各种扩展和改进,框架能让我们解决问题的能力提升一个档次。比如facebook能把php runtime都给优化了,谁还敢拿php谈性能问题。这是个没有干货的回复,欢迎大家补充。
REST的行业现状和应用这个题太大了。 就我的认识而言,Web应用API和URL的设计使用REST算是主流吧,WSDL/SOAP更多用在企业级的应用上。 Web这一层的框架也逐步发展,对于REST的支持也越来越强大,比如Rails很早就鼓励和支持REST设计,不像早些年只把HTTP做成一个简单的远程传输协议,开始对HTTP方法和路径配置提供的更多支持。技术和趋势互相影响着往前发展。 开放平台的API通常也都是REST形式的,而且输入输出一般采用JSON格式,早几年XML格式还不少,现在主流是JSON吧。 HTTP协议的主要设计者Roy Fielding在其博士论文中剖析Web内在的设计原则时首次提出REST,那个时候感觉还是个有些难懂的概念。现在REST应该满大街了,工具支持和大量应用上来的时候,概念本身就会感觉突然变得异常简单,很多技术貌似都经历过这个过程。现在用REST算是普遍认知,讨论更多的是REST API的设计。举个例子就是,当年大家理解OO中的多态都觉得是个很神奇的东西,今天已经是默认的了,讨论的主要都是OO的设计方法了。
REST的行业现状和应用这个题太大了。就我的认识而言,Web应用API和URL的设计使用REST算是主流吧,WSDL/SOAP更多用在企业级的应用上。Web这一层的框架也逐步发展,对于REST的支持也越来越强大,比如Rails很早就鼓励和支持REST设计,不像早些年只把HTTP做成一个简单的远程传输协议,开始对HTTP方法和路径配置提供的更多支持。技术和趋势互相影响着往前发展。开放平台的API通常也都是REST形式的,而且输入输出一般采用JSON格式,早几年XML格式还不少,现在主流是JSON吧。HTTP协议的主要设计者Roy Fielding在其博士论文中剖析Web内在的设计原则时首次提出REST,那个时候感觉还是个有些难懂的概念。现在REST应该满大街了,工具支持和大量应用上来的时候,概念本身就会感觉突然变得异常简单,很多技术貌似都经历过这个过程。现在用REST算是普遍认知,讨论更多的是REST API的设计。举个例子就是,当年大家理解OO中的多态都觉得是个很神奇的东西,今天已经是默认的了,讨论的主要都是OO的设计方法了。
1、过度设计也是糟糕的设计,带来不必要的复杂性。 2、设计模式不是为了用而用,而是为了封装变化性而用 3、一开始不需要也很难给出一个优雅完善的设计,设计是在整个项目过程中不断优化的 4、注意Bob大叔说的Smell,比如修改一个地方不经意影响另外一个地方,比如大量的copy and paste,出现这些情况的时候,马上重构优化设计,设计模式往往都有用武之地,少留技术债 5、学习设计模式的时候,是需要经历一个“有意识的去应用”的阶段,这是学习的阶段,这个阶段的“过分执着”也是有好处的,在实际项目中则要权衡以上所说 6、读开源代码,看别人怎么用,对于学习设计模式的应用,那也是极好的。 7、大抵如此,纵有屠龙之刀,把玩的不好,也会成为你的累赘,但是千万别因此以为这把刀是块废铁,精进武艺才是王道
1、过度设计也是糟糕的设计,带来不必要的复杂性。2、设计模式不是为了用而用,而是为了封装变化性而用3、一开始不需要也很难给出一个优雅完善的设计,设计是在整个项目过程中不断优化的4、注意Bob大叔说的Smell,比如修改一个地方不经意影响另外一个地方,比如大量的copy-and-paste,出现这些情况的时候,马上重构优化设计,设计模式往往都有用武之地,少留技术债5、学习设计模式的时候,是需要经历一个“有意识的去应用”的阶段,这是学习的阶段,这个阶段的“过分执着”也是有好处的,在实际项目中则要权衡以上所说6、读开源代码,看别人怎么用,对于学习设计模式的应用,那也是极好的。7、大抵如此,纵有屠龙之刀,把玩的不好,也会成为你的累赘,但是千万别因此以为这把刀是块废铁,精进武艺才是王道
就如天码营的介绍,天码营秉承让技术学习更加高效和便捷的使命,致力于打造新一代的技术学习服务平台,提供创新并且专业的内容、工具与服务,帮助学习者与从业者实现个人价值。 我们既不是做技术问答社区,更不是做培训机构,我们要做的任何事情都是希望技术学习这件事情更加高效便捷。 所以,我们会持续提供或者聚集更好的内容,更优秀的人以及更好的服务,打造更专业极致的工具,帮助开发者实现更大的价值。
就如天码营的介绍,天码营秉承让技术学习更加高效和便捷的使命,致力于打造新一代的技术学习服务平台,提供创新并且专业的内容、工具与服务,帮助学习者与从业者实现个人价值。我们既不是做技术问答社区,更不是做培训机构,我们要做的任何事情都是希望技术学习这件事情更加高效便捷。所以,我们会持续提供或者聚集更好的内容,更优秀的人以及更好的服务,打造更专业极致的工具,帮助开发者实现更大的价值。
这个问题比较大,我泛泛的说说我的理解。 1. 首先当然应该兼具深度和广度了。 2. 必然要有深入掌握一些技术,比如编程语言,比如特定技术领域的开发。作为软件工程专业的学生,这算安身立命的吃饭家伙。软件工程发展到今天,几十年的发展历程,让我们的抽象层次越来越高,底层细节更多地被屏蔽。比如高级语言的出现屏蔽了汇编语言的复杂性,帮助我们更快速的编程;数据库技术的出现使得我们无需关心物理存储和访问细节,写简单的SQL语句就能搞定,更进一步,ORM框架使得我们通过一条语句调用一个类的一个方法就能方便就行数据操作。今天我们往往站在比较高的抽象层次,拿Web}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信