可能重复:
接口与抽象类(通用OO)
编辑: 我刚刚阅读了"可能重复"的问题和答案,我觉得有人认为这两个问题甚至相似,我感到非常难过......但是,哦......
-------------------------------------------------- -----------------------
大家好,我试图了解OOP范例中的接口.我知道抽象类和接口之间的区别,我也知道接口基本上允许简单的多继承行为和设计,但我没有得到的是"承诺原则".我的意思是,接口应该是实现接口的类实现所有接口方法的承诺.
我不明白的是,每当我们调用它的方法时,我们是否必须检查类是否实现了与instanceOf的接口?没有阅读文档,你不知道一些类实现接口.如果您阅读代码而不是您可以看到自己已定义了该方法,您可以调用它吗?!
如果我有
案例A.
class Ball{
function kick(){...};
}
Run Code Online (Sandbox Code Playgroud)
或案例B.
interface Kickable{
function kick;
}
class Ball implements Kickable{
function kick(){...};
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,在A情况下我会在调用一个不存在的方法时遇到错误("在运行时"),如果是B,我会在尝试运行代码时遇到此错误编译".运行时和编译肯定在这里使用错误(PHP环境).
我记得在Java中有一个Runnable接口可以启用线程.为什么我们必须实现一个Runnable接口,然后在该类中定义run()方法?我的意思是,类可以有一个没有实现接口的Run方法,并且有办法检查类是否定义了特殊方法.好吧,也许我的Java部分问题有点令人困惑:)))
对于这样一个令人困惑的问题我很抱歉,但我希望有人在理解中遇到这些问题,现在他可以分享他的结论:)
谢谢,卢卡
我在PHP中使用DAO模式.我理解以这种方式分离模型所带来的好处,但我不明白的是,当表通过关联实体关联时,您应该如何构建DAO和VO?
我举个例子:
在我的数据库中我有
USERS(id,username);
USERS_POSTS(id_user(FK),id_post(FK));
POSTS(id, title);
USER_COMMENTS(id_user(Fk),id_post(FK));
COMMENTS(id, text);
Run Code Online (Sandbox Code Playgroud)
我使用相应的setter和getter 创建UserVO,PostVO,然后负责最终返回VO的SQL的UserDAO和PostDAO.对来自这些表的数据执行CRUD操作非常简单,但是当您开始考虑关联表并检索跨不同表的数据时,您开始认为使用DAO不再那么简单了......
如果您想要返回文章作者的所有评论,您将如何组织DAO模式?我不需要SQL查询我只是将此作为实际情况的一个例子...
我读到,为每个关联表提供关联DAO和Vo是个好主意.它的VO会包含什么?只有2个外键或来自两个表的所有属性?
如果逻辑具有关联实体的DAO和VO,那么如果查询"通过"多于3个表(使用2个关联实体),那么解决方案是什么?
我怀疑DAO模式会有一个名为users_posts_comments_article的对象:)))
谢谢
我在理解 CORS 概念时遇到问题......
在我看来,同源策略可以保护应用程序免于对“不受信任的域”进行 ajax 调用。因此,mydomain.com对somedomain.com进行 ajax 调用,并且不会检索资源 JSON/Script。
我认为这是为了在发现某些 XSS 漏洞并且有人使用该标签将该代码放入您的页面内容中并且现在可以对其他域进行 ajax 调用时保护 Web 应用程序。- 我对吗?
如果我是对的,那么 CORS 不会提供任何保护,因为服务器策略规定,如果来自mydomain.com的请求到达somedomain.com,则应该允许该请求。现在,如果我进行攻击,我将添加我的脚本,并在我的服务器中设置 CORS 策略以允许这些请求。据我所知,CORS 可以完全绕过同源策略
:|
更新:
阅读更多内容后,我发现答案声称 CORS 不是为了保护mydomain.com应用程序,而是为了保护somedomain.com。假设 somedomain.com 是您的银行,提供用于进行银行转账的 API。银行将允许来自已加载应用程序的浏览器(同一域)的 API 调用。在他们的 CORS 政策中,他们可以说来自mydomain.com 的脚本可以调用他们的 API。请注意,客户端的浏览器可以设置银行的 cookie,从而使银行容易受到来自mydomain.com的脚本的攻击
TL; DR; Facebook登录使得原始推荐URL发生变化,因为在GA中,它看起来像是最初来自Facebook.
使用Google Analytics(UA)进行Facebook(Oauth)登录时,我们遇到以下问题:
用户登陆/ page/1?utm_campaign = aaa和GA会话是使用正确的初始引荐来源,广告系列等创建的.
用户访问其他几个页面并决定使用Facebook注册
Facebook登录使用户的浏览器转到Facebook并返回更改推荐,从而创建新的GA会话
当用户回到我们的回调网址时,我们会触发一个在GA中转换为目标的事件
问题是所有使用Oauth注册的用户都将推荐设置为Facebook,并将登陆页面设置为Facebook回调后登陆的页面,因为当GA"重置"会话时:(.
有没有办法在GA中加入两个会话并让它知道它始终是同一个用户,以便Facebook注册保留有关初始引荐来源,登录页面,UTM等的完整信息?
我正在尝试提高使用第三方 JS 的网站的性能(他们都这样做:))。
运行灯塔分析后,报告显示:
减少第三方代码的影响第三方代码阻塞主线程
由于每个 JS 通过下载、解析和执行脚本来阻塞关键路径,因此我将所有非关键 JS 推到页面底部并添加了defer属性
尽管如此,我仍然认为特定的 JS 资源阻塞了主线程。
推迟资源应该并行下载它,并在渲染完成后执行它,所以我真的不明白为什么 Lighthouse 一直在主线程阻塞资源列表中显示它。当然,它会在主线程上解析和执行,但它不会阻塞关键路径,也不会对用户体验产生太大影响
例如,在不影响 Lighthouse 性能分数的情况下向网页添加 Tidio 聊天小部件的最佳解决方案是什么?
干杯
编辑
我已经测试过,延迟和异步都会阻止主线程
下面的代码也阻止了它
window.addEventListener('DOMContentLoaded', (event) => {
var tidioScript = document.createElement("script");
tidioScript.src = "//code.tidio.co/xxxx.js";
document.body.appendChild(tidioScript);
});
Run Code Online (Sandbox Code Playgroud)
有效的方法是显式延迟将脚本标签注入到 DOM 中:
setTimeout(function() {
var tidioScript = document.createElement("script");
tidioScript.src = "//code.tidio.co/#{tidio_id}.js";
document.body.appendChild(tidioScript);
}, 3 * 1000);
Run Code Online (Sandbox Code Playgroud)
但这感觉就是错误的:/我认为 defer 应该达到相同的结果:/
我认为这应该不是一个大问题,但我无法自己找到解决方案.一如既往:p我有一个UIWebView,其背景颜色设置为clearColor但是当我尝试向下滚动太多时,我得到了上面加载的HTML的"弹跳区域",深灰色.我想将其更改为透明/白色.有没有办法改变这个?
Digression:我读过继承UIScrollView的类可以具有属性bounce = NO,然后它们根本不会显示弹跳区域.即使UIWebView继承了那个类,我也不想阻止它弹跳,只是"用白色反弹"可以这么说......
非常感谢,
卢卡
好吧,我知道很难理解线程是如何工作的,但是直到有人帮助我理解我会相信它是一个bug :)
在我的Main类及其main()方法中,我有:
public static void main(String args[]){
StoneBucket stoneBucket = new StoneBucket();
StonePutter spRunnable = new StonePutter(stoneBucket);
StoneThrower stRunnable = new StoneThrower(stoneBucket);
StoneThrower stRunnable2 = new StoneThrower(stoneBucket);
//Create the Threads that will take the Runnables as arguments
Thread puttingThread = new Thread(spRunnable);
Thread throwingThread = new Thread(stRunnable);
Thread throwingThread2 = new Thread(stRunnable);
puttingThread.setName("Putter");
throwingThread.setName("Thrower 1");
throwingThread2.setName("Thrower 2");
[...]
Run Code Online (Sandbox Code Playgroud)
然后在我的StoneThrower课程中
public class StoneThrower implements Runnable{
private StoneBucket sb;
private String name;
public StoneThrower(StoneBucket _sb){
this.sb = _sb;
}
public void …Run Code Online (Sandbox Code Playgroud) 可能重复:
什么是cron的Windows版本?
嗨,大家好,
我在IIS服务器上有一个script.php,我希望每隔x分钟自动调用该脚本.问题是我需要像在浏览器中那样将参数传递给脚本(script.php?task = aaa).计划任务似乎忽略了参数?task = aaa ...
我怎么能运行这个脚本传递一些"GET"参数?
谢谢,L
想象一下,一个类别的Cottage扩建了建筑和代码
Building building = new Building();
Cottage cottage = (Cottage)building;
Run Code Online (Sandbox Code Playgroud)
现在,考虑到java继承的本质,完全有意义的是不能将Building转换为Cottage,但对我来说没有意义的是这个编译.为什么要编译然后抛出运行时ClassCastException?
在实际运行程序之前,构建是否是对Building对象的引用是不是很明显?
作为一个普遍的问题,我知道我得到了一个可能重复的这个:)但我找不到答案为什么它的编译问题:)
EDIT2我在这里接受了一个很好的答案(更不用说下面的讨论了:)),但我仍然在Java中找到了接受的答案,导致运行时错误而不是编译错误最有趣......
编辑我编辑了IllegalCastException并输入了正确的ClassCastException
我有一个组件,如果变量为真,它<Parent>就会呈现该组件。<Modal>showModal
该变量在组件的函数showModal中定义。setup(){}<Parent>
我想在用户执行以下操作时关闭模式:
父组件
<template>
<Modal v-if="isShownModal" @clickedModalClose="isShownModal=false" @keydown.esc="isShownModal=false">
//removed some code for clarity purposes
</template>
<script>
export default {
components: {Modal},
setup(){
const isShownModal = ref(false)
...
Run Code Online (Sandbox Code Playgroud)
注意@clickedModalClose="isShownModal=false"和@keydown.esc="isShownModal=false"
模态组件
<template>
<div class="modal is-active">
<div class="modal-background"></div>
<div class="modal-content box">
<slot name="header"></slot>
<slot name="body"></slot>
</div>
<!-- Listen to a custom event @clicked-modal-close (v-on) -->
<button @click="$emit('clickedModalClose')" class="modal-close is-large" aria-label="close"></button>
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
要关闭模式,当在子组件中单击关闭按钮时,我将发出一个事件并侦听该事件@clickedModalClose,并按预期正确关闭模式
尽管如此,当我按下 ESC …
方案如下:
我有一个活动RunTrainingWorkoutsView,它使用XML布局_run_workout.xml_,其中一些标签由CountDownTimer更新.工作良好...
现在,除了每秒通过onTick() CountDownTimer对象的回调方法更新的标签,我想在我的_run_workout.xml layout_中添加一个自定义表面视图,它将绘制一些每秒由同一onTick()方法更新的弧. .
我的run_workout.xml:
<training.timer.CounterClockView
android:id="@+id/counter_clock_surface"
android:layout_width="300dp"
android:layout_height="240dp">
</training.timer.CounterClockView>
Run Code Online (Sandbox Code Playgroud)
我的自定义View扩展了surfaceView
public class CounterClockView extends SurfaceView {
Paint paint = new Paint();
Paint paint2 = new Paint();
final RectF rect = new RectF();
final RectF rect2 = new RectF();
int counterArcAngle = 15;
//constructor
public CounterClockView(Context context, AttributeSet attributeSet) {
super(context);
//setting some paint properties...
this.setBackgroundColor(Color.TRANSPARENT);
}
@Override
public void onDraw(Canvas canvas) {
rect.set(50, 50, 150, 150);
rect2.set(50, …Run Code Online (Sandbox Code Playgroud) 大家,早安,
我有一个RSS阅读器,当单击tableView中的一个feed时打开一个Detail视图控制器.Feed的HTML是从DetailController的自定义setFeed()方法中的items数组加载的:
[self.itemContent loadHTMLString:[NSString stringWithFormat:@"%@"[item objectForKey:@"content"]] baseURL:nil];
Run Code Online (Sandbox Code Playgroud)
HTML加载没有任何问题.如果单击其中的任何链接,则新请求将加载到同一UIWebView中.问题是我想在单击itemContent中的链接时在另一个UIWebView中显示该网页.
所以,我做的是我宣布
itemContent.delegate = self
Run Code Online (Sandbox Code Playgroud)
并在委托类(self)中定义以下方法:
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {if (navigationType == UIWebViewNavigationTypeLinkClicked) {
NSLog(@"Opening Outside link!!!\n");
BrowserViewController *browserViewController = [[[BrowserViewController alloc] init] autorelease];
//following line doesn't change anything in the result
//browserViewController.webView.delegate = self;
[browserViewController.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
[self.navigationController pushViewController:browserViewController animated:YES];
return NO;
}
return YES;
Run Code Online (Sandbox Code Playgroud)
}
此方法肯定会在itemContent中首次加载HTML 与在itemContent webView中对链接执行的点击之间进行识别.NavigationController推送到下一个View但没有加载任何内容.我的意思是我在BrowserViewController的NIB文件中将一个标签放在UIWebView旁边,以确保通过查看标签来加载NIB; 和它的表现.另外,我在NIB文件中定义了一个与UIWebView连接的Outlet webView,所以这应该不是问题.
如果不清楚似乎是什么问题是:当点击链接时,browserViewController会显示标签,但webView不会加载请求.
如果有人可以查看提供的代码,那就太好了.
我祝你生日愉快,L